如果键的值在单独的列表中,则尝试从列表中的字典中调用所有值。
例如,我有以下列出的字典:
status = [{'name': 'Carrousel', 'wait': 0, 'isOpen': True, 'single_rider': None},
{'name': 'Balloon Flite', 'wait': 0, 'isOpen': True, 'single_rider': None},
{'name': 'Skyrush', 'wait': 0, 'isOpen': False, 'single_rider': None},
{'name': 'SooperDooperLooper',
'wait': 5,
'isOpen': True,
'single_rider': None},
{'name': 'Fahrenheit', 'wait': 20, 'isOpen': True, 'single_rider': None},
{'name': 'Dummy', 'wait': 0, 'isOpen': False, 'single_rider': None}]
我也有此列表:
route = ['Skyrush', 'SooperDooperLooper', 'Carrousel', 'Fahrenheit']
基本上,我想为'wait'
中的那些名称打印出status
中route
的值。
如果知道索引,我知道如何调用行的值,但是在尝试仅调用包含“ name”特定值的行时遇到了麻烦。
我的预期结果是:
0
5
0
20
基本上,这就是route
内每个骑行的“等待”时间。
谢谢!任何帮助将不胜感激。我浏览了其他帖子,但找不到与我的问题类似的内容。
答案 0 :(得分:2)
使用列表理解:
[d['wait'] for d in status if d['name'] in route]
输出:
[0, 0, 5, 20]
答案 1 :(得分:2)
也添加@Chris的答案,以获得预期的顺序:
StuffProxy
输出:
[d['wait'] for d in sorted(status, key=lambda x: ''.join(route).find(x['name'])) if d['name'] in route]
答案 2 :(得分:0)
如@Chris的答案所示,列表理解是必经之路。
但是,如果您希望该订单成为与您的route
相匹配的订单,这将是一个解决方案:
[next(s for s in status if s['name'] == name)['wait'] for name in route]
这实际上使您[0, 5, 0, 20]
而不是[0, 0, 5, 20]
。
这也直接回答了您的实际问题:如何通过引用字典键来访问词典列表中的列表项。
next(item for item in some_list_of_dicts if s['key'] == 'some value')
为您提供符合条件的第一项。
答案 3 :(得分:0)
另一种方法:更改输入内容,以便更轻松地访问内容
name_indexed_status = dict(map(lambda x: (x.pop("name"), x), status))
print (str(name_indexed_status))
for r in route:
print(name_indexed_status[r]["wait"])
{
'Carrousel':{'wait':0,'isOpen':True,'single_rider':None},
'气球Flite':{'wait':0,'isOpen':True,'single_rider':None},
'Skyrush':{'wait':0,'isOpen':False,'single_rider':None},
'SooperDooperLooper':{'wait':5,'isOpen':True,'single_rider':None},
'华氏度':{'wait':20,'isOpen':True,'single_rider':None},
'虚拟':{'wait':0,'isOpen':False,'single_rider':无}
}0
5
0
20