从字典列表中查找值

2024-04-20 06:37:50 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下词典列表:

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'},
        ]

我需要得到形式的值

"Get hero id where actor name is 'Don Cheadle' and hero name is 'War Machine'

或者

"Get hero name where id is 1"

如何在python中实现这一点?你知道吗

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

这个问题把我弄糊涂了。我怎样才能做到这一点?你知道吗


Tags: nameid列表getismachinewhere词典
3条回答

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

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'}))

你可以用你的数据创建一个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。你知道吗

您可以使用python中的一个简单for循环来实现这一点

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'])


输出

Captain America
004

相关问题 更多 >