使用另一个字典

时间:2016-11-06 19:01:44

标签: python dictionary

目前我有两本词典 我想用其他字典的值更改内部键

d1 = {1:{1: 2.0,2: 1.5,3: 5.0},
      2:{1: 7.5,2: 6.0,3: 1.0}}
d2 = {1: 'a', 2: 'b', 3: 'c'}
expected output: {1:{'a': 2.0,'b': 1.5,'c': 5.0},
                  2:{'a': 7.5,'b': 6.0,'c': 1.0}}

可悲的是,这两个词典充满了大量的数据,并且需要很长时间来迭代d1并调用迭代d2的方法来替换d1中的键。

是否可以在更快的时间内更改内部键,值对? 我发现有可能替换一个简单字典的键:

d = {'x':1,'y':2,'z':3}
d1 = {'x':'a','y':'b','z':'c'}
d = {d1[k]:v for k,v in d.items()}

output: {'a': 1, 'c': 3, 'b': 2}

但没有嵌套字典。

所以现在我不知道如何解决我的问题。 也许你们其中一个人可以帮助我。

2 个答案:

答案 0 :(得分:1)

您可以使用嵌套字典理解执行此操作:

>>> d1 = {1:{1: 2.0,2: 1.5,3: 5.0},
...       2:{1: 7.5,2: 6.0,3: 1.0}}
>>> d2 = {1: 'a', 2: 'b', 3: 'c'}
>>> {a: {d2[k]: v for k, v in d.items()} for a, d in d1.items()}
{1: {'a': 2.0, 'c': 5.0, 'b': 1.5}, 2: {'a': 7.5, 'c': 1.0, 'b': 6.0}}

OR,使用简单的for循环:

>>> for _, d in d1.items():  # Iterate over the "d1" dict
...     for k, v in d.items():  # Iterate in nested dict
...         d[d2[k]] = v  # Add new key based on value of "d2"
...         del d[k]   # Delete old key in nested dict
... 
>>> d1
{1: {'a': 2.0, 'c': 5.0, 'b': 1.5}, 2: {'a': 7.5, 'c': 1.0, 'b': 6.0}}

第二种方法将更新原始d1 dict,其中第一种方法将创建新的dict对象。

答案 1 :(得分:0)

我认为答案是使用我之前遇到的字典拉链。

您的问题可以通过zip解决,如本答案所示。虽然你的内在级别需要稍微不同。

Map two lists into a dictionary in Python

d1 = {1:{1: 2.0,2: 1.5,3: 5.0},
      2:{1: 7.5,2: 6.0,3: 1.0}}
d2 = {1: 'a', 2: 'b', 3: 'c'}

d1_edited = {} # I prefer to create a new dictionary than edit the existing whilst looping though existing
newKeys = d2.values() # e.g. ['a', 'b', 'c']
for outer in d1.keys(): # e.g. 1 on first iteration
    newValues = d1[outer]  # e.g. e.g. {1: 2.0,2: 1.5,3: 5.0} on first iteration
    newDict = dict(zip(newKeys,newValues)) # create dict as paired up keys and values
    d1_edited[outer] = newDict # assign dictionary to d1_edited using the unchanged outer key.

print d1_edited

输出

{1: {'a': 1, 'c': 3, 'b': 2}, 2: {'a': 1, 'c': 3, 'b': 2}}