用for循环从字典中的字典中提取项目

时间:2017-10-27 09:51:42

标签: python dictionary

我想将字典中的字典元素追加到带有for循环的列表中,但我[“fruit”]看起来像一个索引。我该怎么办?

dict_1 = {"number_1": {"fruit": ['banana'],
                 "no": ['1']
                },
      "number_2": {"fruit": ['apple'],
                 "no": ['2']
                }
    }

list_1 = [i["fruit"] for i in dict_1["number_1"]]
print list_1
# print dict_1["number_1"]["fruit"]

2 个答案:

答案 0 :(得分:0)

你的错误是你迭代dict_1['number_1' - 它只返回该词典的键:

for item in dict_1['number_1']:
    print item
fruit
no

如果您想迭代这些值,则需要添加.items()

for item, value in dict_1['number_1'].items():
    print item
fruit ['banana']
no ['1']

因此,如果您只想要香蕉,请使用dict_1['number_1'].items()重复字典,并将value部分附加到列表中:

list1 = []
for item, value in dict_1['number_1'].items():
    list1.append(value)

答案 1 :(得分:0)

你不仅可以直接获得''banana']'number_1',因为字典在python中是无序的,我们不知道哪个键,值对出现,这就是为什么我们不知道何时'将显示number_1',并将'number_2'作为第一个键值对。

无序词典有两种可能的解决方案:

  

第一个解决方案获得所有水果名称:

dict_1 = {"number_1": {"fruit": ['banana'],
                 "no": ['1']
                },
      "number_2": {"fruit": ['apple'],
                 "no": ['2']
                }
    }

for key,value in dict_1.items():
    print(value['fruit'])
  

第二是

如果你特别想要香蕉然后首先检查密钥,因为我说字典是无序的。

for key,value in dict_1.items():
    if key=='number_1':
        print(value['fruit'])

其他解决方案是,如果您不想检查密钥,请使用收集模块中的有序字典:

from collections import OrderedDict

my_dict=OrderedDict()
my_dict['number_1'] = OrderedDict()

my_dict['number_1']['fruit']=['banana']
my_dict['number_1']['no']=['1']



my_dict['number_2']=OrderedDict()
my_dict['number_2']['fruit']=['apple']
my_dict['number_2']['no']=['2']


print(list(list(my_dict.values())[0].values())[0])

输出:

['banana']