制作字典列表,使用迭代器覆盖列表中的一个键条目
make list of dictionaries overwriting one key entry from a list using iterators
我有一种可怕的感觉,这将是重复的,我已经尽力找到答案了。
我有一个字典和一个列表,我想创建一个字典列表,使用列表覆盖其中一个键值,如下所示:
d={"a":1,"b":10}
c=[3,4,5]
arg=[]
for i in c:
e=d.copy()
e["a"]=i
arg.append(e)
这给出了想要的结果
arg
[{'a': 3, 'b': 10}, {'a': 4, 'b': 10}, {'a': 5, 'b': 10}]
但是代码很丑陋,尤其是使用复制命令时,在我的真实示例中我有 4 或 5 个列表而不是一个列表,这导致了一个巨大的嵌套循环。我确信有一个像
这样的迭代器更简洁的方法
arg=[d *with* d[a]=i for i in c]
我不确定用什么来代替“with”。
再次抱歉,如果已经回答了这个问题。
IIUC,你可以这样做:
d={"a":1,"b":10}
c=[3,4,5]
res = [{ **d, "a" : ci } for ci in c]
print(res)
输出
[{'a': 3, 'b': 10}, {'a': 4, 'b': 10}, {'a': 5, 'b': 10}]
部分:
"a" : ci
重写键 "a"
处的值,**d
解压字典。
我会这样做:
arg=[d.copy() for i in range(len(c))]
for i in range(len(arg)):
arg[i]['a']=c[i]
此代码首先创建一个长度为 c 的字典列表,然后为每个字典更新 'a',相应的 itme 为 c
您可以在列表推导中使用字典推导,检查键 == 'a':
d = {"a":1,"b":10}
c = [3,4,5]
l = [{k: num if k == 'a' else v for k,v in d.items()} for num in c]
在 Python 3.9 中,有一种新方法可以使用更新值创建新字典并保留旧字典而不更新 - 使用运算符 |
new_dict = old_dict | dict_with_updates
有了列表理解,它将是
arg = [ d | {"a": i} for i in c]
完整示例
d = {"a": 1, "b": 10}
c = [3, 4, 5]
arg = [ d | {"a": i} for i in c]
print(arg)
顺便说一句:还有 |=
更新现有词典
old_dict |= dict_with_updates
我有一种可怕的感觉,这将是重复的,我已经尽力找到答案了。
我有一个字典和一个列表,我想创建一个字典列表,使用列表覆盖其中一个键值,如下所示:
d={"a":1,"b":10}
c=[3,4,5]
arg=[]
for i in c:
e=d.copy()
e["a"]=i
arg.append(e)
这给出了想要的结果
arg
[{'a': 3, 'b': 10}, {'a': 4, 'b': 10}, {'a': 5, 'b': 10}]
但是代码很丑陋,尤其是使用复制命令时,在我的真实示例中我有 4 或 5 个列表而不是一个列表,这导致了一个巨大的嵌套循环。我确信有一个像
这样的迭代器更简洁的方法arg=[d *with* d[a]=i for i in c]
我不确定用什么来代替“with”。
再次抱歉,如果已经回答了这个问题。
IIUC,你可以这样做:
d={"a":1,"b":10}
c=[3,4,5]
res = [{ **d, "a" : ci } for ci in c]
print(res)
输出
[{'a': 3, 'b': 10}, {'a': 4, 'b': 10}, {'a': 5, 'b': 10}]
部分:
"a" : ci
重写键 "a"
处的值,**d
解压字典。
我会这样做:
arg=[d.copy() for i in range(len(c))]
for i in range(len(arg)):
arg[i]['a']=c[i]
此代码首先创建一个长度为 c 的字典列表,然后为每个字典更新 'a',相应的 itme 为 c
您可以在列表推导中使用字典推导,检查键 == 'a':
d = {"a":1,"b":10}
c = [3,4,5]
l = [{k: num if k == 'a' else v for k,v in d.items()} for num in c]
在 Python 3.9 中,有一种新方法可以使用更新值创建新字典并保留旧字典而不更新 - 使用运算符 |
new_dict = old_dict | dict_with_updates
有了列表理解,它将是
arg = [ d | {"a": i} for i in c]
完整示例
d = {"a": 1, "b": 10}
c = [3, 4, 5]
arg = [ d | {"a": i} for i in c]
print(arg)
顺便说一句:还有 |=
更新现有词典
old_dict |= dict_with_updates