получить то же значение для ключей в другой словарь из списка словаря - PullRequest
0 голосов
/ 28 мая 2018

Вот мой список словарей.

d = [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'},
     {'count': '50', 'zone': 'PIMPRI', 'cycle': '15'},
     {'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]

Как получить вывод, как показано ниже:

d_one = [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'},
         {'count': '50', 'zone': 'PIMPRI', 'cycle': '15'}]

d_two = [{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]

Получение отдельных данных из списка словаря из двух ключей зоны и цикла.Для одной зоны и пары циклов создайте один список словаря, и он будет идти до конца.

Ответы [ 5 ]

0 голосов
/ 28 мая 2018

Сделайте дикт, используя пары (dct['zone'], dct['cycle']) в качестве ключей:

>>> result = {}
>>> 
>>> for dct in d:
...     result.setdefault((dct['zone'], dct['cycle']), []).append(dct)
... 
>>> result
{('PIMPRI', '15'): [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'}, {'count': '50', 'zone': 'PIMPRI', 'cycle': '15'}], ('PIMPRI', '30'): [{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]}
0 голосов
/ 28 мая 2018

Зачем использовать отдельные словари для всех этих значений.Не могли бы вы сделать это в одном словаре.Например,

d = [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'},
     {'count': '50', 'zone': 'PIMPRI', 'cycle': '15'},
     {'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]

это то, что мы могли бы получить,

res = {}
for ele in d:
    res.setdefault((ele['cycle'],ele['zone']), [])
    res[(ele['cycle'], ele['zone'])].append(ele['count'])
0 голосов
/ 28 мая 2018

Один из подходов заключается в использовании коллекций .И ваша переменная ('cycle') в качестве ключа в диктовке.

Пример:

import collections 
res = collections.defaultdict(list)
d = [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'},
     {'count': '50', 'zone': 'PIMPRI', 'cycle': '15'},
     {'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]

for i in d:
    res[i["cycle"]].append(i)
print(res['15'])
print("-----")
print(res['30'])

Выход:

[{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'}, {'count': '50', 'zone': 'PIMPRI', 'cycle': '15'}]
-----
[{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]
0 голосов
/ 28 мая 2018

Попробуйте с groupby,

from itertools import groupby 
from operator import itemgetter
grouper = itemgetter("cycle", "zone")
dict_one,dict_two = (list(g) for _,g in groupby(d,key=grouper))

Код вернет кортеж, теперь у нас есть только 2 элемента.Таким образом, присвоение значения будет работать здесь.Если у вас есть больше значений, вы можете присвоить эти значения dict или сохранить как повторяемые.

Выход

In [9]: dict_one
Out[9]: 
[{'count': '100', 'cycle': '15', 'zone': 'PIMPRI'},
 {'count': '50', 'cycle': '15', 'zone': 'PIMPRI'}]

In [10]: dict_two
Out[10]: [{'count': '150', 'cycle': '30', 'zone': 'PIMPRI'}]
0 голосов
/ 28 мая 2018

Вы хотите фильтровать ваши данные:

d_one = filter(lambda d:d['cycle']=='15',d)
> [{'count': '100', 'zone': 'PIMPRI', 'cycle': '15'}, 
>  {'count': '50', 'zone': 'PIMPRI', 'cycle': '15'}]

и

d_two = filter(lambda d:d['cycle']=='30',d)
> [{'count': '150', 'zone': 'PIMPRI', 'cycle': '30'}]
...