Извлечение значений из списка в Python - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть следующий список:

mylist = [
    ['OF', 'O'],
    ['ODH', 'O'],
    ['1937066911', 'NUMBER'],
    ['FLOYD', 'PERSON'],
    ['WESLEY', 'PERSON'],
    ['MCGRAW', 'PERSON'],
    ['04', 'NUMBER'],
    ['RUTH', 'PERSON'],
    ['MAE', 'PERSON'],
    ['MCGRAW', 'PERSON']
]

Это желаемый вывод

desired_output = [
    {'O':'OF', 'ODH'},
    {'NUMBER':'1937066911'},
    {'PERSON':'FLOYD','WESLEY','MCGRAW'},
    {'NUMBER':'04'},
    {'PERSON':'RUTH','MAE','MCGRAW'}
]

Это то, что я пробовал:

import json
from collections import defaultdict
import itertools
new_dict = defaultdict(list)

with open('A.json') as jsonfile:
    file_data = json.load(jsonfile)
    for d in range(len(file_data)):
       try:
          if file_data[d][1] in file_data[d+1]:
            new_dict[file_data[d][1]].append(file_data[0])
       except:
             pass
    print(new_dict)

ПРИМЕЧАНИЕ A.json имеет список, как показано выше

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Лучшее, что мы можем здесь сделать, это список диктовок со списками в качестве значений.

from itertools import groupby
from operator import itemgetter

mylist = [['OF', 'O'],['ODH', 'O'],['1937066911', 'NUMBER'],['FLOYD', 'PERSON'],['WESLEY', 'PERSON'],['MCGRAW', 'PERSON'],['04', 'NUMBER'],['RUTH', 'PERSON'],['MAE', 'PERSON'],['MCGRAW', 'PERSON']]
first = itemgetter(0)
second = itemgetter(1)
result = []

for key, group in groupby(mylist, key=second):
    result.append({key:[first(g) for g in group]})

результат:

>>> result
[{'O': ['OF', 'ODH']},
 {'NUMBER': ['1937066911']},
 {'PERSON': ['FLOYD', 'WESLEY', 'MCGRAW']},
 {'NUMBER': ['04']},
 {'PERSON': ['RUTH', 'MAE', 'MCGRAW']}]
0 голосов
/ 24 ноября 2018

Вы можете использовать groupby , при условии, что вам нужен список диктов, в которых перечислены значения:

from operator import itemgetter
from itertools import groupby

lst = [['OF', 'O'], ['ODH', 'O'], ['1937066911', 'NUMBER'], ['FLOYD', 'PERSON'], ['WESLEY', 'PERSON'],
          ['MCGRAW', 'PERSON'], ['04', 'NUMBER'], ['RUTH', 'PERSON'], ['MAE', 'PERSON'], ['MCGRAW', 'PERSON']]

result = [{ k : list(map(itemgetter(0), group))} for k, group in groupby(lst, key=itemgetter(1))]
print(result)

Вывод

[{'O': ['OF', 'ODH']}, {'NUMBER': ['1937066911']}, {'PERSON': ['FLOYD', 'WESLEY', 'MCGRAW']}, {'NUMBER': ['04']}, {'PERSON': ['RUTH', 'MAE', 'MCGRAW']}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...