如何用列表中的可用键替换字典键?

时间:2014-02-25 15:01:17

标签: python list dictionary python-2.6

我有一个包含名称及其相关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}}

3 个答案:

答案 0 :(得分:3)

使用dict comprehension(迭代aList

>>> {v: aDict[k] for k, v in aList}
{'uid2': {'a': 2}, 'uid3': {'a': 7}, 'uid1': {'a': 1}}

<强>更新

如果您无法使用词典理解,请将dictgenerator 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}}