Как перебрать список словарей, взять значение условия и добавить его в новый список? - PullRequest
0 голосов
/ 06 февраля 2020

Итак, у меня есть большой список со словарями внутри. Вот небольшой пример одного из словарей:

[{'id': 32,
'calls': 1,
'wounded': 2,
'dog': True,
'hitrun': 'David Williams'},
{'id': 384,

Я хочу перебрать эти словари, получить значения вызовов и раненых, если они больше 0, и добавить эти значения в новый список , Я пытался сделать это:

lijst = []
for x in nee:
if x['calls'] > '0':
    list.append(x)
if x['wounded'] > '0':
    list.append(x)

Но это не работает. Есть также некоторые вызовы и раненые с None в качестве значения, поэтому> 0 также не работает

Ответы [ 3 ]

0 голосов
/ 06 февраля 2020

Вы можете использовать понимание вложенного списка, потому что вам нужно перебирать ваши данные и ваши условия, например, что-то вроде этого:

data = [
    {'id': 32,
    'calls': '1',
    'wounded': '2',
    'dog': True,
    'hitrun': 'David Williams'},
    {'id': 32,
    'calls': None,
    'wounded': None,
    'dog': True,
    'hitrun': 'David Williams'}
]

output = [
    x[field] for x in data for field in ['calls', 'wounded'] if x[field] is not None and int(x[field]) > 0
]

print(output)
>>> ['1', '2']
0 голосов
/ 06 февраля 2020

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

data = [
    {'id': 32,
    'calls': '1',
    'wounded': '2',
    'dog': True,
    'hitrun': 'David Williams'},
    {'id': 32,
    'calls': None,
    'wounded': None,
    'dog': True,
    'hitrun': 'David Williams'}
]
call_wounded_list = [dict_[f] for dict_ in data for f in ['calls', 'wounded'] if str(dict_[f]).isdigit() and float(dict_[f]) > 0]

это возвращает

>>> call_wounded_list
['1', '2']
0 голосов
/ 06 февраля 2020

Это работает:

nee = [{'id': 32,
'calls': 1,
'wounded': 2,
'dog': True,
'hitrun': 'David Williams'}]

l = []
for x in nee:
  if x['calls'] > 0:
    l.append(x['calls'])
  if x['wounded'] > 0:
    l.append(x['wounded'])

print(l)

Вы также можете суммировать два списка понимания:

wounded = [x['wounded'] for x in nee if x['wounded'] > 0]
calls = [x['calls'] for x in nee if x['calls'] > 0]
new_list = wounded + calls
print(new_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...