Как добавить командные данные в список - PullRequest
1 голос
/ 06 августа 2020

У меня есть список dicts, в котором много значений, например

"resultset":[
    {
       "Car":"Aston Martin DB Nine",
       "Value_in_US":"10",
    },
    {
       "Car":"Aston Martin DB Nine",
       "Value_in_US":"11",
    },
    {
       "Car":"Aston Martin DB Nine",
       "Value_in_US":"10",
    },
    {
       "Car":"Aston Martin DB Nine",
       "Value_in_US":"14",
    },
    {
       "Car":"Lambo ",
       "Value_in_US":"11",
    },
    {
       "Car":"Porshe Nine",
       "Value_in_US":"12",
    },
    {
       "Car":"Porshe Nine",
       "Value_in_US":"10",
    },
 ]

Я пытаюсь разделить список уникальных автомобилей с соответствующими значениями. Ожидаемый результат:

{
'Porshe Nine' : [10,12],
'Lambo': [11],
'Aston Martin DB Nine': [10,11,10,14]
}

Я пробовал что-то вроде

test = {}
    for data in  result['resultset']:
        test[data['Car']] = ???

Я не уверен, как получить правильные значения, как я уже упоминал

Ответы [ 4 ]

2 голосов
/ 06 августа 2020

Похоже, здесь будет полезно defaultdict:

from collections import defaultdict
test = defaultdict(list)
for data in result['resultset']:
    test[data['Car']].append(data['Value_in_US'])

Очень похоже на logi c на уже имеющийся у вас код, но что defaultdict позволяет вам делать Предположим, что уже существует пара ключ / значение автомобиль: список цен. Обратите внимание, что нам не нужно проверять, есть ли автомобиль в словаре, мы просто добавляем цену.

0 голосов
/ 06 августа 2020

Понимание словаря / списка должно помочь, если вам нравятся встроенные выражения,

resultset=[
    {
       "Car":"Aston Martin DB Nine",
       "Value_in_US":"10",
    },
    {
       "Car":"Aston Martin DB Nine",
       "Value_in_US":"11",
    },
    {
       "Car":"Aston Martin DB Nine",
       "Value_in_US":"10",
    },
    {
       "Car":"Aston Martin DB Nine",
       "Value_in_US":"14",
    },
    {
       "Car":"Lambo ",
       "Value_in_US":"11",
    },
    {
       "Car":"Porshe Nine",
       "Value_in_US":"12",
    },
    {
       "Car":"Porshe Nine",
       "Value_in_US":"10",
    },
]

#init with empty list for each cars
result = {dic['Car']:[] for dic in resultset} 

#append the value to each car entry
[result[dic['Car']].append(dic['Value_in_US']) for dic in resultset]
print(result)

>>>> {'Aston Martin DB Nine': ['10', '11', '10', '14'], 'Lambo ': ['11'], 'Porshe Nine': ['12', '10']}

Вот хорошее руководство по среде, чтобы начать с понимания словаря.

0 голосов
/ 06 августа 2020

Вы можете использовать itertools.groupby, чтобы сделать это легко

resultset = [
 {'Car': 'Aston Martin DB Nine', 'Value_in_US': '10'},
 {'Car': 'Aston Martin DB Nine', 'Value_in_US': '11'},
 {'Car': 'Aston Martin DB Nine', 'Value_in_US': '10'},
 {'Car': 'Aston Martin DB Nine', 'Value_in_US': '14'},
 {'Car': 'Lambo ', 'Value_in_US': '11'},
 {'Car': 'Porshe Nine', 'Value_in_US': '12'},
 {'Car': 'Porshe Nine', 'Value_in_US': '10'}]

from itertools import groupby
f = lambda d: d['Car']
res = {k:[d2['Value_in_US'] for d2 in g] for k,g in groupby(sorted(resultset, key=f), f)}
print(res)

Outout

{'Aston Martin DB Nine': ['10', '11', '10', '14'],
 'Lambo ': ['11'],
 'Porshe Nine': ['12', '10']}
0 голосов
/ 06 августа 2020

Без дополнительного импорта:

test = {}
for data in result['resultset']:
    if not data['Car'] in test.keys():
        test[data['Car']] = []
    
    test[data['Car']].append(data['Value_in_US'])

работает

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