Python 用于循环计算的字典
Python dictionary for loop calculation
我需要在创建字典的地方创建代码,我需要为每个键设置值。我可以手动完成,但需要创建一个循环来完成它,以缩短代码。计算过程如下:
Rank 1 = 2500
Rank 2 = Rank 1 + 7500 (2500 + 5000 ) = 10 000
Rank 3 = Rank 2 + 12500 (7500 + 5000) = 22 500
Rank 4 = Rank 3 + 17500 (12500 + 5000) = 40 000
字典应如下所示:
rank 0 = 0
rank 1 = 2500
rank 2 = 10000
rank 3 = 22500
rank 4 = 40000
rank 5 = 62500
rank 6 = 90000
我要循环的代码:
def affinity(xp):
return xp + 5000
rank_dict = {}
for number in range(0, 31):
rank_dict["rank %s" % number] = 0
rank_dict["rank 1"] = rank_dict.get("rank 0") + 2500
rank_dict["rank 2"] = rank_dict.get("rank 1") + affinity(2500)
rank_dict["rank 3"] = rank_dict.get("rank 2") + affinity(7500)
rank_dict["rank 4"] = rank_dict.get("rank 3") + affinity(12500)
rank_dict["rank 5"] = rank_dict.get("rank 4") + affinity(17500)
rank_dict["rank 6"] = rank_dict.get("rank 5") + affinity(22500)
rank_dict["rank 7"] = rank_dict.get("rank 6") + affinity(27500)
rank_dict["rank 8"] = rank_dict.get("rank 7") + affinity(32500)
rank_dict["rank 9"] = rank_dict.get("rank 8") + affinity(37500)
rank_dict["rank 10"] = rank_dict.get("rank 9") + affinity(42500)
rank_dict["rank 11"] = rank_dict.get("rank 10") + affinity(47500)
rank_dict["rank 12"] = rank_dict.get("rank 11") + affinity(52500)
rank_dict["rank 13"] = rank_dict.get("rank 12") + affinity(57500)
rank_dict["rank 14"] = rank_dict.get("rank 13") + affinity(62500)
rank_dict["rank 15"] = rank_dict.get("rank 14") + affinity(67500)
rank_dict["rank 16"] = rank_dict.get("rank 15") + affinity(72500)
rank_dict["rank 17"] = rank_dict.get("rank 16") + affinity(77500)
rank_dict["rank 18"] = rank_dict.get("rank 17") + affinity(82500)
rank_dict["rank 19"] = rank_dict.get("rank 18") + affinity(87500)
rank_dict["rank 20"] = rank_dict.get("rank 19") + affinity(92500)
rank_dict["rank 21"] = rank_dict.get("rank 20") + affinity(97500)
rank_dict["rank 22"] = rank_dict.get("rank 21") + affinity(102500)
rank_dict["rank 23"] = rank_dict.get("rank 22") + affinity(107500)
rank_dict["rank 24"] = rank_dict.get("rank 23") + affinity(112500)
rank_dict["rank 25"] = rank_dict.get("rank 24") + affinity(117500)
rank_dict["rank 26"] = rank_dict.get("rank 25") + affinity(122500)
rank_dict["rank 27"] = rank_dict.get("rank 26") + affinity(127500)
rank_dict["rank 28"] = rank_dict.get("rank 27") + affinity(132500)
rank_dict["rank 29"] = rank_dict.get("rank 28") + affinity(137500)
rank_dict["rank 30"] = rank_dict.get("rank 29") + affinity(142500)
print(rank_dict)
试过这个,但没有正确循环:
def affinity(xp):
return xp + 5000
rank_dict = {'rank 0': 0, 'rank 1': 2500}
for number in range(2, 31):
rank_dict["rank %s" % number] = 2500
for number in range(2, 31):
rank_dict["rank %s" % number] = rank_dict.get("rank %s" % number) + affinity(5000)
print(rank_dict)
这里主要是对下一项的判定公式进行简化——模式是每次与前一等级的增量增加5000。
应该这样做:
rank_dict = {"rank 1": 2500}
inc = 2500
for rank in range(2, 31):
inc += 5000
rank_dict[f"rank {rank}"] = rank_dict[f"rank {rank-1}"] + inc
print(rank_dict)
或者随意使用 zip
和 range
来避免手动递增计数器:
rank_dict = {}
for rank, prev, inc in zip(
range(1, 31),
range(0, 30),
range(2500, 2500 + 30 * 5000, 5000)
):
rank_dict[f"rank {rank}"] = rank_dict.get(f"rank {prev}", 0) + inc
print(rank_dict)
这是一个不错的方法。
import numpy as np
incs = [2500] + [5000] * 5
vals = np.cumsum(np.cumsum(incs))
rank_dict = {f'rank {i}':v for i,v in enumerate(vals,1)}
生成的字典:
{'rank 1': 2500,
'rank 2': 10000,
'rank 3': 22500,
'rank 4': 40000,
'rank 5': 62500,
'rank 6': 90000}
也许你可以证明你错在哪里?
我能看到的是,当你添加一个新的字典条目时,你总是在第一个循环“2500”中添加值
第二个循环只添加了 5000 (xp)+ 5000 added in the function,所以你所有的字典条目都可能添加为 12500.
我相信你需要的是:
var = 2500
for number in range(2, 31):
var+= 5000
rank_dict["rank %s" % number] = var
有很多方法可以做到这一点。这是一个:
rank_dict = dict()
val = 0
for i in range(31):
rank_dict[f'rank {i}'] = val
val += 2_500 if i == 0 else 5_000
print(rank_dict)
...或Python 3.10 版本:
rank_dict = dict()
for i in range(31):
match i:
case 0:
val = 0
case 1:
val = 2_500
case _:
val += 5_000
rank_dict[f'rank {i}'] = val
我需要在创建字典的地方创建代码,我需要为每个键设置值。我可以手动完成,但需要创建一个循环来完成它,以缩短代码。计算过程如下:
Rank 1 = 2500
Rank 2 = Rank 1 + 7500 (2500 + 5000 ) = 10 000
Rank 3 = Rank 2 + 12500 (7500 + 5000) = 22 500
Rank 4 = Rank 3 + 17500 (12500 + 5000) = 40 000
字典应如下所示:
rank 0 = 0
rank 1 = 2500
rank 2 = 10000
rank 3 = 22500
rank 4 = 40000
rank 5 = 62500
rank 6 = 90000
我要循环的代码:
def affinity(xp):
return xp + 5000
rank_dict = {}
for number in range(0, 31):
rank_dict["rank %s" % number] = 0
rank_dict["rank 1"] = rank_dict.get("rank 0") + 2500
rank_dict["rank 2"] = rank_dict.get("rank 1") + affinity(2500)
rank_dict["rank 3"] = rank_dict.get("rank 2") + affinity(7500)
rank_dict["rank 4"] = rank_dict.get("rank 3") + affinity(12500)
rank_dict["rank 5"] = rank_dict.get("rank 4") + affinity(17500)
rank_dict["rank 6"] = rank_dict.get("rank 5") + affinity(22500)
rank_dict["rank 7"] = rank_dict.get("rank 6") + affinity(27500)
rank_dict["rank 8"] = rank_dict.get("rank 7") + affinity(32500)
rank_dict["rank 9"] = rank_dict.get("rank 8") + affinity(37500)
rank_dict["rank 10"] = rank_dict.get("rank 9") + affinity(42500)
rank_dict["rank 11"] = rank_dict.get("rank 10") + affinity(47500)
rank_dict["rank 12"] = rank_dict.get("rank 11") + affinity(52500)
rank_dict["rank 13"] = rank_dict.get("rank 12") + affinity(57500)
rank_dict["rank 14"] = rank_dict.get("rank 13") + affinity(62500)
rank_dict["rank 15"] = rank_dict.get("rank 14") + affinity(67500)
rank_dict["rank 16"] = rank_dict.get("rank 15") + affinity(72500)
rank_dict["rank 17"] = rank_dict.get("rank 16") + affinity(77500)
rank_dict["rank 18"] = rank_dict.get("rank 17") + affinity(82500)
rank_dict["rank 19"] = rank_dict.get("rank 18") + affinity(87500)
rank_dict["rank 20"] = rank_dict.get("rank 19") + affinity(92500)
rank_dict["rank 21"] = rank_dict.get("rank 20") + affinity(97500)
rank_dict["rank 22"] = rank_dict.get("rank 21") + affinity(102500)
rank_dict["rank 23"] = rank_dict.get("rank 22") + affinity(107500)
rank_dict["rank 24"] = rank_dict.get("rank 23") + affinity(112500)
rank_dict["rank 25"] = rank_dict.get("rank 24") + affinity(117500)
rank_dict["rank 26"] = rank_dict.get("rank 25") + affinity(122500)
rank_dict["rank 27"] = rank_dict.get("rank 26") + affinity(127500)
rank_dict["rank 28"] = rank_dict.get("rank 27") + affinity(132500)
rank_dict["rank 29"] = rank_dict.get("rank 28") + affinity(137500)
rank_dict["rank 30"] = rank_dict.get("rank 29") + affinity(142500)
print(rank_dict)
试过这个,但没有正确循环:
def affinity(xp):
return xp + 5000
rank_dict = {'rank 0': 0, 'rank 1': 2500}
for number in range(2, 31):
rank_dict["rank %s" % number] = 2500
for number in range(2, 31):
rank_dict["rank %s" % number] = rank_dict.get("rank %s" % number) + affinity(5000)
print(rank_dict)
这里主要是对下一项的判定公式进行简化——模式是每次与前一等级的增量增加5000。
应该这样做:
rank_dict = {"rank 1": 2500}
inc = 2500
for rank in range(2, 31):
inc += 5000
rank_dict[f"rank {rank}"] = rank_dict[f"rank {rank-1}"] + inc
print(rank_dict)
或者随意使用 zip
和 range
来避免手动递增计数器:
rank_dict = {}
for rank, prev, inc in zip(
range(1, 31),
range(0, 30),
range(2500, 2500 + 30 * 5000, 5000)
):
rank_dict[f"rank {rank}"] = rank_dict.get(f"rank {prev}", 0) + inc
print(rank_dict)
这是一个不错的方法。
import numpy as np
incs = [2500] + [5000] * 5
vals = np.cumsum(np.cumsum(incs))
rank_dict = {f'rank {i}':v for i,v in enumerate(vals,1)}
生成的字典:
{'rank 1': 2500,
'rank 2': 10000,
'rank 3': 22500,
'rank 4': 40000,
'rank 5': 62500,
'rank 6': 90000}
也许你可以证明你错在哪里? 我能看到的是,当你添加一个新的字典条目时,你总是在第一个循环“2500”中添加值 第二个循环只添加了 5000 (xp)+ 5000 added in the function,所以你所有的字典条目都可能添加为 12500.
我相信你需要的是:
var = 2500
for number in range(2, 31):
var+= 5000
rank_dict["rank %s" % number] = var
有很多方法可以做到这一点。这是一个:
rank_dict = dict()
val = 0
for i in range(31):
rank_dict[f'rank {i}'] = val
val += 2_500 if i == 0 else 5_000
print(rank_dict)
...或Python 3.10 版本:
rank_dict = dict()
for i in range(31):
match i:
case 0:
val = 0
case 1:
val = 2_500
case _:
val += 5_000
rank_dict[f'rank {i}'] = val