从字典列表中查找值

时间:2019-12-30 14:01:12

标签: python python-3.x dictionary

假设我有以下词典列表:

heroes = [
            {'id':'001', 'actor_name':'Chris Evans', 'hero_name':'Captain America'},
            {'id':'002', 'actor_name':'Chris Hemsworth', 'hero_name':'Thor'},
            {'id':'003', 'actor_name':'Robert Downey', 'hero_name':'Iron Man'},
            {'id':'004', 'actor_name':'Don Cheadle', 'hero_name':'War Machine'},
            {'id':'005', 'actor_name':'Jeremy Renner', 'hero_name':'Hawkeye'},
        ]

我需要获取表格的值;

  

”获取英雄ID,其中演员名称为“ Don Cheadle”,英雄名称为“战争”   机器”

  

“获取id为1的英雄名称”

如何在python中实现呢?

由于列表中有多个词典,因此可能会有一些具有相同ID的词典。因此,在这种情况下,我需要所有这些值。

这个问题使我非常困惑。我该如何实现?

3 个答案:

答案 0 :(得分:2)

您可以在python中使用简单的for循环

NOLOCK

输出

heroes = [
    {'id': '001', 'actor_name': 'Chris Evans', 'hero_name': 'Captain America'},
    {'id': '002', 'actor_name': 'Chris Hemsworth', 'hero_name': 'Thor'},
    {'id': '003', 'actor_name': 'Robert Downey', 'hero_name': 'Iron Man'},
    {'id': '004', 'actor_name': 'Don Cheadle', 'hero_name': 'War Machine'},
    {'id': '005', 'actor_name': 'Jeremy Renner', 'hero_name': 'Hawkeye'},
]

for hero in heroes:
    if int(hero['id']) == 1:
        print(hero['hero_name'])
    elif hero['hero_name'] == 'War Machine' and hero['actor_name'] == 'Don Cheadle':
        print(hero['id'])


答案 1 :(得分:1)

您可以使用数据创建一个pandas.DataFrame

import pandas as pd
heroes = [
            {'id':'001', 'actor_name':'Chris Evans', 'hero_name':'Captain America'},
            {'id':'002', 'actor_name':'Chris Hemsworth', 'hero_name':'Thor'},
            {'id':'003', 'actor_name':'Robert Downey', 'hero_name':'Iron Man'},
            {'id':'004', 'actor_name':'Don Cheadle', 'hero_name':'War Machine'},
            {'id':'005', 'actor_name':'Jeremy Renner', 'hero_name':'Hawkeye'},
         ]
data = pd.DataFrame(heroes)

然后例如进行查询

>>> data['actor_name'] == 'Don Cheadle'
0    False
1    False
2    False
3     True
4    False
Name: actor_name, dtype: bool

然后使用查询结果

>>> data.loc[data['actor_name'] == 'Don Cheadle']['id']
3    004
Name: id, dtype: object

您也可以创建布尔类型的查询

>>> (data['actor_name'] == 'Don Cheadle') & (data['hero_name'] == 'War Machine')
0    False
1    False
2    False
3     True
4    False
dtype: bool

还有pandas.read_sql_query可以perform SQL queries against your dataframe

答案 2 :(得分:1)

我将创建一个函数,该函数使用要返回的列和条件字典,并相应地过滤记录:

def find_data(returnCol, conds):
    retVal = []
    for hero in heroes:
        toAdd = True
        for k, v in conds.items():
            if not hero[k] == v:
               toAdd = False
               break
        if toAdd:
            retVal.append(hero[returnCol])

    return retVal

print(find_data('id', {'actor_name' : 'Don Cheadle', 'hero_name' : 'War Machine'}))
相关问题