如果满足条件,如何仅在列表中调用字典值?

时间:2019-05-17 01:42:46

标签: python python-3.x list dictionary

如果键的值在单独的列表中,则尝试从列表中的字典中调用所有值。

例如,我有以下列出的字典:

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'中的那些名称打印出statusroute的值。

如果知道索引,我知道如何调用行的值,但是在尝试仅调用包含“ name”特定值的行时遇到了麻烦。

我的预期结果是:

0
5
0
20

基本上,这就是route内每个骑行的“等待”时间。

谢谢!任何帮助将不胜感激。我浏览了其他帖子,但找不到与我的问题类似的内容。

4 个答案:

答案 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