2016-04-17 2 views
0

У меня есть список, который содержит dicts как это:Python списковых в Список Dict

[ 
    {'match_id': 1L, 'player_b_id': 2L, 'round_id': 1L, 'match_winner_id': 2L, 'match_date': datetime.date(2016, 3, 9), 'player_a_id': 1L, 'tournament_id': 1L}, 
    {'match_id': 2L, 'player_b_id': 4L, 'round_id': 1L, 'match_winner_id': 4L, 'match_date': datetime.date(2016, 3, 10), 'player_a_id': 3L, 'tournament_id': 1L} 
] 

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

Я пытался что-то вроде этого, но безуспешно:

matchesData = [str(v) if k == 'match_date' else v for k, v in enumerate(matchesData)] 

ответ

3

Если вы должны использовать список понимание, то вы должны также перестраивать каждый словарь:

matchesData = [{k: str(v) if k == 'match_date' else v for k, v in d.items()} 
       for d in matchesData] 

или использовать

matchesData = [dict(d, match_date=str(d['match_date'])) 
       for d in matchesData] 

В первом примере используется словарь co mprehension, который просто создает новый словарь из старого путем циклизации каждой пары ключ-значение. Для ключа 'match_date' значения передаются через функцию str(). Это означает, что ключ match_date является полностью необязательным.

Вторая версия требует'match_date' существовать, и создает копию исходного словаря с dict() function, добавляя в дополнительный ключ (который заменит оригинальную пару 'match_date' ключ-значение из d).

Демо:

>>> from pprint import pprint 
>>> matchesData = [ 
...  {'match_id': 1L, 'player_b_id': 2L, 'round_id': 1L, 'match_winner_id': 2L, 'match_date': datetime.date(2016, 3, 9), 'player_a_id': 1L, 'tournament_id': 1L}, 
...  {'match_id': 2L, 'player_b_id': 4L, 'round_id': 1L, 'match_winner_id': 4L, 'match_date': datetime.date(2016, 3, 10), 'player_a_id': 3L, 'tournament_id': 1L} 
... ] 
>>> pprint([{k: str(v) if k == 'match_date' else v for k, v in d.items()} for d in matchesData]) 
[{'match_date': '2016-03-09', 
    'match_id': 1L, 
    'match_winner_id': 2L, 
    'player_a_id': 1L, 
    'player_b_id': 2L, 
    'round_id': 1L, 
    'tournament_id': 1L}, 
{'match_date': '2016-03-10', 
    'match_id': 2L, 
    'match_winner_id': 4L, 
    'player_a_id': 3L, 
    'player_b_id': 4L, 
    'round_id': 1L, 
    'tournament_id': 1L}] 
>>> pprint([dict(d, match_date=str(d['match_date'])) for d in matchesData]) 
[{'match_date': '2016-03-09', 
    'match_id': 1L, 
    'match_winner_id': 2L, 
    'player_a_id': 1L, 
    'player_b_id': 2L, 
    'round_id': 1L, 
    'tournament_id': 1L}, 
{'match_date': '2016-03-10', 
    'match_id': 2L, 
    'match_winner_id': 4L, 
    'player_a_id': 3L, 
    'player_b_id': 4L, 
    'round_id': 1L, 
    'tournament_id': 1L}] 
Смежные вопросы