我有一个包含名称及其相关uid的列表列表:
aList = [['x', 'uid1'], ['y', 'uid2'], ['z', 'uid3']]
我有这样的字典:
aDict = {'x': {'a':1}, 'y':{'a':2}, 'z':{'a':7}}
现在我如何用aList中的相关uid替换aDict中的键。 输出应该是
aDict = {'uid1':{'a':1}, 'uid2':{'a':2}, 'uid3':{'a':7}}
答案 0 :(得分:3)
使用dict comprehension(迭代aList
)
>>> {v: aDict[k] for k, v in aList}
{'uid2': {'a': 2}, 'uid3': {'a': 7}, 'uid1': {'a': 1}}
<强>更新强>
如果您无法使用词典理解,请将dict
与generator expression一起使用:
>>> dict((v, aDict[k]) for k, v in aList)
{'uid2': {'a': 2}, 'uid3': {'a': 7}, 'uid1': {'a': 1}}
答案 1 :(得分:2)
首先将aList
转换为这样的词典
aList_dict = dict(aList)
然后使用字典理解你可以像这样构建新词典
print {aList_dict.get(k, k):aDict[k] for k in aDict}
# {'uid2': {'a': 2}, 'uid3': {'a': 7}, 'uid1': {'a': 1}}
aList_dict.get(k, k)
表示,如果找到k
,则返回与其对应的值,否则返回k
本身。
注意:即使alist
中没有少量密钥,此方法仍然有效,因为如果匹配的密钥不匹配,它将把当前密钥本身作为默认值找到。
编辑:当您使用Python 2.6和dictionary comprehensions were not backported to 2.6 from 3.1时,您可以使用
aList_dict = dict(aList)
print dict((aList_dict.get(k, k), aDict[k]) for k in aDict)
答案 2 :(得分:0)
迭代aList
并获取aDict
中的值。以value
为键复制到结果字典。
>>> result = {}
>>> for key, value in aList:
... result[value] = aDict[key]
...
...
>>>
>>> result
{'uid2': {'a': 2}, 'uid3': {'a': 7}, 'uid1': {'a': 1}}