Python 将字典键传递给新字典

Python 将字典键传递给新字典,python,dictionary,for-loop,key,Python,Dictionary,For Loop,Key,为什么这个代码不起作用?它返回键3的键错误。adict有key3,它与我向空字典添加键的方式似乎没有什么不同,只是我在循环中相互传递键。如何将一个字典中的键和值传递到具有相同主键的新字典中 adict = {'key1':{'a':.078, 'b':1000, 'c':100}, 'key2':{'a':.0645, 'b':10, 'c':5}, 'key3':{'a':.0871, 'b

为什么这个代码不起作用?它返回键3的键错误。adict有key3,它与我向空字典添加键的方式似乎没有什么不同,只是我在循环中相互传递键。如何将一个字典中的键和值传递到具有相同主键的新字典中

adict = {'key1':{'a':.078, 'b':1000, 'c':100},
                          'key2':{'a':.0645, 'b':10, 'c':5},
                          'key3':{'a':.0871, 'b':250, 'c':45},
                          'key4':{'a':.0842, 'b':200, 'c':37},
                          'key5':{'a':.054, 'b':409, 'c':82},
                          'key6':{'a':.055, 'b':350, 'c':60}}

another_dict = {}
for k in adict:
    another_dict[k]['transferred'] = adict[k]['b']


>>>   Traceback (most recent call last):
      File "C:\Python27\test.py", line 26, in <module>
        another_dict[k]['transferred'] = adict[k]['b']
      KeyError: 'key3'
adict={'key1':{'a':.078,'b':1000,'c':100},
'key2':{'a':.0645,'b':10,'c':5},
'key3':{'a':.0871,'b':250,'c':45},
'key4':{'a':.0842,'b':200,'c':37},
'key5':{'a':.054,'b':409,'c':82},
'key6':{'a':.055,'b':350,'c':60}
另一个dict={}
对于adict中的k:
另一条命令[k]['transfer']=adict[k]['b']
>>>回溯(最近一次呼叫最后一次):
文件“C:\Python27\test.py”,第26行,在
另一条命令[k]['transfer']=adict[k]['b']
KeyError:'key3'

使用
另一个dict[k]['transfer']
,您正在尝试访问
'transfer'
键k的dict的
键,该键尚未创建

您可以在此处使用:-

修改代码:-

>>> from collections import defaultdict
>>> adict = {'key1':{'a':.078, 'b':1000, 'c':100},
...                           'key2':{'a':.0645, 'b':10, 'c':5},
...                           'key3':{'a':.0871, 'b':250, 'c':45},
...                           'key4':{'a':.0842, 'b':200, 'c':37},
...                           'key5':{'a':.054, 'b':409, 'c':82},
...                           'key6':{'a':.055, 'b':350, 'c':60}}
... 
... another_dict = defaultdict(dict)
... for k in adict:
...     another_dict[k]['transferred'] = adict[k]['b']

>>> another_dict
5: defaultdict(<type 'dict'>, {'key3': {'transferred': 250}, 
                           'key2': {'transferred': 10}, 
                           'key1': {'transferred': 1000}, 
                           'key6': {'transferred': 350}, 
                           'key5': {'transferred': 409}, 
                           'key4': {'transferred': 200}})
>>从集合导入defaultdict
>>>adict={'key1':{'a':.078,'b':1000,'c':100},
…'key2':{'a':.0645,'b':10,'c':5},
…'key3':{'a':.0871,'b':250,'c':45},
…'key4':{'a':.0842,'b':200,'c':37},
…'key5':{'a':.054,'b':409,'c':82},
…'key6':{'a':.055,'b':350,'c':60}
... 
... 另一个dict=defaultdict(dict)
... 对于adict中的k:
...     另一条命令[k]['transfer']=adict[k]['b']
>>>另一条命令
5:defaultdict(,{'key3':{'transferred':250},
'key2':{'transferred':10},
'key1':{'transferred':1000},
'key6':{'transferred':350},
'key5':{'transferred':409},
'key4':{'transferred':200})

使用
另一个dict[k]['transfer']
,您正在尝试访问
'transfer'
键k
的dict的
键,该键尚未创建

您可以在此处使用:-

修改代码:-

>>> from collections import defaultdict
>>> adict = {'key1':{'a':.078, 'b':1000, 'c':100},
...                           'key2':{'a':.0645, 'b':10, 'c':5},
...                           'key3':{'a':.0871, 'b':250, 'c':45},
...                           'key4':{'a':.0842, 'b':200, 'c':37},
...                           'key5':{'a':.054, 'b':409, 'c':82},
...                           'key6':{'a':.055, 'b':350, 'c':60}}
... 
... another_dict = defaultdict(dict)
... for k in adict:
...     another_dict[k]['transferred'] = adict[k]['b']

>>> another_dict
5: defaultdict(<type 'dict'>, {'key3': {'transferred': 250}, 
                           'key2': {'transferred': 10}, 
                           'key1': {'transferred': 1000}, 
                           'key6': {'transferred': 350}, 
                           'key5': {'transferred': 409}, 
                           'key4': {'transferred': 200}})
>>从集合导入defaultdict
>>>adict={'key1':{'a':.078,'b':1000,'c':100},
…'key2':{'a':.0645,'b':10,'c':5},
…'key3':{'a':.0871,'b':250,'c':45},
…'key4':{'a':.0842,'b':200,'c':37},
…'key5':{'a':.054,'b':409,'c':82},
…'key6':{'a':.055,'b':350,'c':60}
... 
... 另一个dict=defaultdict(dict)
... 对于adict中的k:
...     另一条命令[k]['transfer']=adict[k]['b']
>>>另一条命令
5:defaultdict(,{'key3':{'transferred':250},
'key2':{'transferred':10},
'key1':{'transferred':1000},
'key6':{'transferred':350},
'key5':{'transferred':409},
'key4':{'transferred':200})

问题是
另一个dict[k]
实际上还不存在,而您正在尝试对一些甚至没有初始化的东西执行
另一个dict[k]['transfer']
。因此,您需要首先对其进行初始化:

In [35]: adict = {'key1':{'a':.078, 'b':1000, 'c':100},
                          'key2':{'a':.0645, 'b':10, 'c':5},
                          'key3':{'a':.0871, 'b':250, 'c':45},
                          'key4':{'a':.0842, 'b':200, 'c':37},
                          'key5':{'a':.054, 'b':409, 'c':82},
                          'key6':{'a':.055, 'b':350, 'c':60}}

In [36]: another_dict={}

In [37]: for k in adict:
    another_dict[k]={}                          #initialize another_dict[k]
    another_dict[k]['transferred']=adict[k]['b']

In [38]: another_dict
Out[38]: 
{'key1': {'transferred': 1000},
 'key2': {'transferred': 10},
 'key3': {'transferred': 250},
 'key4': {'transferred': 200},
 'key5': {'transferred': 409},
 'key6': {'transferred': 350}}

问题是
另一个dict[k]
实际上还不存在,而您正试图对一些甚至没有初始化的东西执行
另一个dict[k]['transfer']
。因此,您需要首先对其进行初始化:

In [35]: adict = {'key1':{'a':.078, 'b':1000, 'c':100},
                          'key2':{'a':.0645, 'b':10, 'c':5},
                          'key3':{'a':.0871, 'b':250, 'c':45},
                          'key4':{'a':.0842, 'b':200, 'c':37},
                          'key5':{'a':.054, 'b':409, 'c':82},
                          'key6':{'a':.055, 'b':350, 'c':60}}

In [36]: another_dict={}

In [37]: for k in adict:
    another_dict[k]={}                          #initialize another_dict[k]
    another_dict[k]['transferred']=adict[k]['b']

In [38]: another_dict
Out[38]: 
{'key1': {'transferred': 1000},
 'key2': {'transferred': 10},
 'key3': {'transferred': 250},
 'key4': {'transferred': 200},
 'key5': {'transferred': 409},
 'key6': {'transferred': 350}}

在访问字典之前,您必须在
另一个目录[k]
中创建一个新字典:

adict = {'key1':{'a':.078, 'b':1000, 'c':100},
                      'key2':{'a':.0645, 'b':10, 'c':5},
                      'key3':{'a':.0871, 'b':250, 'c':45},
                      'key4':{'a':.0842, 'b':200, 'c':37},
                      'key5':{'a':.054, 'b':409, 'c':82},
                      'key6':{'a':.055, 'b':350, 'c':60}}

another_dict = {}
for k in adict:
    if k not in another_dict:
        another_dict[k] = {}
    another_dict[k]['transferred'] = adict[k]['b']

在访问字典之前,您必须在
另一个目录[k]
中创建一个新字典:

adict = {'key1':{'a':.078, 'b':1000, 'c':100},
                      'key2':{'a':.0645, 'b':10, 'c':5},
                      'key3':{'a':.0871, 'b':250, 'c':45},
                      'key4':{'a':.0842, 'b':200, 'c':37},
                      'key5':{'a':.054, 'b':409, 'c':82},
                      'key6':{'a':.055, 'b':350, 'c':60}}

another_dict = {}
for k in adict:
    if k not in another_dict:
        another_dict[k] = {}
    another_dict[k]['transferred'] = adict[k]['b']

如果我理解正确,使用
dict
理解非常简单:

>>> pprint({k:{'transferred':v['b']}  for k, v in adict.iteritems()})
{'key1': {'transferred': 1000},
 'key2': {'transferred': 10},
 'key3': {'transferred': 250},
 'key4': {'transferred': 200},
 'key5': {'transferred': 409},
 'key6': {'transferred': 350}}
您还可以使用一个方便的函数,只保留某些子键(如果它们的名称相同)


如果我理解正确,使用
dict
理解非常简单:

>>> pprint({k:{'transferred':v['b']}  for k, v in adict.iteritems()})
{'key1': {'transferred': 1000},
 'key2': {'transferred': 10},
 'key3': {'transferred': 250},
 'key4': {'transferred': 200},
 'key5': {'transferred': 409},
 'key6': {'transferred': 350}}
您还可以使用一个方便的函数,只保留某些子键(如果它们的名称相同)


谢谢@Ashwini我明白你的意思。还有@Jon

随着我在Python和(“字典理解”)方面的进步,我发现另一个解决方案是:

another_dict = {k:{'b':adict[k]['b']} for k in adict}

谢谢@Ashwini我明白你的意思。还有@Jon

随着我在Python和(“字典理解”)方面的进步,我发现另一个解决方案是:

another_dict = {k:{'b':adict[k]['b']} for k in adict}

不要忘记
从集合导入defaultdict
不要忘记
从集合导入defaultdict
我想你需要使用这个:
{k:{'transferred':adict[k]['b']}对于adict}中的k
@AshwiniChaudhary我注意到了-但更喜欢
.iteritems()
方法使值查找更加明确,但是无论如何…我想你需要使用这个:
{k:{'transferred':adict[k]['b']}来表示adict}
@AshwiniChaudhary我注意到了-但是我更喜欢
.iteritems()
方法来使值查找更加明确,但是无论如何。。。