我正在利用这样一个事实:对于 python >= 3.7 字典中的元素是按插入顺序检索的。
我想创建一个字典,其中第一个 skip 项目包含零;之后,他们从主字典中获取相关值
dict_1 = {
'a1' : 11,
'a2' : 12,
'a3' : 13,
'b1' : 14,
'b2' : 15,
'c1' : 16,
}
skip = 3
dict_2 = {}
for item in range(skip):
dict_2[str(item)] = 0
index = 0
for key, item in dict_1.items():
index += 1
if index > skip:
dict_2[key] = item
print(dict_2)
<块引用>
{'0': 0, '1': 0, '2': 0, 'b1': 14, 'b2': 15, 'c1': 16}
为免生疑问,dict_2 中的键与 dict_1 中的键不同,用于项目 这符合我的要求,但不雅。我可以采取更pythonic的方法吗?
答案 0 :(得分:1)
您可以使用 islice
来避免 if
检查:
from itertools import islice
dict_2 = {str(item): 0 for item in range(skip)}
for key, item in islice(dict_1.items(), skip, None):
dict_2[key] = item
或者,使用 enumerate
将两个选项组合到一个循环中:
for i, (key, value) in enumerate(dict_1.items()):
if i < skip:
dict_2[str(i)] = 0
else:
dict_2[key] = value
答案 1 :(得分:0)
{(xy[0] if i>=skip else str(i)):(xy[1] if i>=skip else 0) for i,xy in enumerate(iter(dict_1.items()))}
但是让我们记住Simple is better than complex and Readability counts.
答案 2 :(得分:0)
不确定这是您的想法(没有得到您的确认),请尽量对您的原始代码进行最少的更改,并保留原件。 keys
也完好无损:
skip = 3
dict_2 = dict_1.copy() # create a new copy for updating
for k, v in dict_1.items():
if skip > 0:
dict_2[k] = 0
skip -= 1
print(dict_2)