我想知道是否存在一种更优雅的方式来将字典列表与另一个字典连接起来。
list1 = list()
list1.append({"ip": '12.12.12.12', 'code': '123'})
list1.append({"ip": '12.12.12.11', 'code': '345'})
dict2 = {"mask": "255.255.255.255"}
nlist = list()
for dict1 in list1:
dict1.update(dict2)
nlist.append(dict1)
print nlist
这是预期的输出:
[{'ip': '12.12.12.12', 'code': '123', 'mask': '255.255.255.255'},
{'ip': '12.12.12.11', 'code': '345', 'mask': '255.255.255.255'}]
答案 0 :(得分:2)
您的代码具有更新每个字典对象的相同实例的副作用,导致list1
和nlist
引用相同的字典对象。执行代码后:
>>> list1
[{'ip': '12.12.12.12', 'code': '123', 'mask': '255.255.255.255'}, {'ip': '12.12.12.11', 'code': '345', 'mask': '255.255.255.255'}]
>>> nlist
[{'ip': '12.12.12.12', 'code': '123', 'mask': '255.255.255.255'}, {'ip': '12.12.12.11', 'code': '345', 'mask': '255.255.255.255'}
>>> [list1[i] is nlist[i] for i in range(len(list1))]
[True, True]
>>> list1[0]['newkey'] = 'value'
>>> list1[0]
{'ip': '12.12.12.12', 'code': '123', 'mask': '255.255.255.255', 'newkey': 'value'}
>>> nlist[0]
{'ip': '12.12.12.12', 'code': '123', 'mask': '255.255.255.255', 'newkey': 'value'}
以上显示dicts是相同的,因此任何更新都会反映在两个列表中。
如果您只是想更新list1
中的所有词典,请执行以下操作:
dict2 = {"mask": "255.255.255.255"}
for d in list1:
d.update(dict2)
答案 1 :(得分:1)
你可以去寻找看起来更简单的列表理解。虽然差别不大。
list1 = list()
list1.append({"ip": '12.12.12.12', 'code': '123'})
list1.append({"ip": '12.12.12.11', 'code': '345'})
dict2 = {"mask": "255.255.255.255"}
[ _dict.update(dict2) for _dict in list1]
print list1
Output: [{'ip': '12.12.12.12', 'code': '123', 'mask': '255.255.255.255'}, {'ip': '12.12.12.11', 'code': '345', 'mask': '255.255.255.255'}]