Как проверить, является ли в списке в словаре ключ? - PullRequest
5 голосов
/ 11 января 2020

У меня есть словарь, подобный этому:

a = {'values': [{'silver': '10'}, {'gold': '50'}]}

Теперь я хотел бы проверить, есть ли в словаре ключ 'silver':

if 'silver' in a['values']:

Но я получаю ошибку :

NameError: name 'silver' is not defined

Итак, как мне достичь этого в python?

Ответы [ 4 ]

9 голосов
/ 11 января 2020

Вы можете использовать любой .

if any('silver' in d for d in a['values']):
   # do stuff
4 голосов
/ 11 января 2020
# Notice that a['values'] is a list of dictionaries.
>>> a = {'values': [{'silver': '10'}, {'gold': '50'}]}

# Therefore, it makes sense that 'silver' is not inside a['values'].
>>> 'silver' in a['values']
False

# What is inside is {'silver': '10'}.
>>> a['values']
[{'silver': '10'}, {'gold': '50'}]

# To find the matching key, you could use the filter function.
>>> matches = filter(lambda x: 'silver' in x.keys(), a['values'])

# 'next' allows you to view the matches the filter found. 
>>> next(matches)
{'silver': '10'}

# 'any' allows you to check if there is any matches given the filter. 
>>> any(matches):
True
3 голосов
/ 11 января 2020

Вы можете попробовать это:

if 'silver' in a['values'][0].keys():
0 голосов
/ 11 января 2020

Если вы хотите использовать метод интерполяции списка, вы можете сгладить список диктовок в список ключей следующим образом:

In: [key for pair in a['values'] for key in pair.keys()]
Out: ['silver', 'gold']

Тогда:

In: 'silver' in [key for pair in a['values'] for key in pair.keys()]
Out: True

На основе этот ответ для выравнивания списка списков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...