Манипулирование вложенным списком Python - PullRequest
3 голосов
/ 30 октября 2019

Привет всем разработчикам Python, я играл со списками Python и библиотекой Pandas, и у меня возникли проблемы с задачами манипулирования списками. Я хочу объединить все элементы словаря test_list [i] [0] в один индекс вложенного списка, в соответствии с тем же именем состояния в индексе 0 каждого вложенного списка.

Пример ввода:

test_list= [['Alabama', {'Baldwin County': 182265}],
 ['Alabama', {'Barbour County': 27457}],
 ['Arkansas', {'Newton County': 8330}],
 ['Arkansas', {'Perry County': 10445}],
 ['Arkansas', {'Phillips County': 21757}],
 ['California', {'Madera County': 150865}],
 ['California', {'Marin County': 252409}],
 ['Colorado', {'Adams County': 441603}],
 ['Colorado', {'Alamosa County': 15445}],
 ['Colorado', {'Arapahoe County': 572003}]
]

Пример вывода:

test_list1= [['Alabama', {'Baldwin County': 182265, 'Barbour County': 27457}],
 ['Arkansas', {'Newton County': 8330, 'Perry County': 10445, 'Phillips County': 21757}],
 ['California', {'Madera County': 150865, 'Marin County': 252409}],
 ['Colorado', {'Adams County': 441603, 'Alamosa County': 15445, 'Arapahoe County': 572003}]
]

Я пробовал много подходов, чтобы решить эту проблему, но пока безуспешно. Я начинающий разработчик Python,Спасибо за помощь заранее.

Ответы [ 2 ]

3 голосов
/ 30 октября 2019

Подход

  • Использование collection.defaultdict в качестве способа группировки данных по общему полю (в данном случае по состоянию).

  • Для каждого состояния defaultdict создает новый dict , который обновляется методом dict.update () .

  • Превратить результат обратно в список с list, примененным к элементам словаря (пары ключ / значение).

Рабочий код

>>> from pprint import pprint
>>> from collections import defaultdict
>>> d = defaultdict(dict)
>>> for state, info in test_list:
        d[state].update(info)

>>> result = list(d.items())
>>> pprint(result)
[('Alabama', {'Baldwin County': 182265, 'Barbour County': 27457}),
 ('Arkansas',
  {'Newton County': 8330, 'Perry County': 10445, 'Phillips County': 21757}),
 ('California', {'Madera County': 150865, 'Marin County': 252409}),
 ('Colorado',
  {'Adams County': 441603, 'Alamosa County': 15445, 'Arapahoe County': 572003})]
2 голосов
/ 30 октября 2019

Python3.5 или новее

tmp_dict = {}
for lst in test_list:
city = lst[0]
country = lst[1]
if city in tmp_dict:
    tmp_dict[city] = {**tmp_dict[city], **country}
else:
    tmp_dict[city] = country
print(tmp_dict) #you will get dict result
#If you want to get list only
output_result = []
for k in tmp_dict:
    tmp_list.append([k,tmp_dict[k]])
print(output_result) #you will get list result
...