Отображение общих данных в списке Python - PullRequest
0 голосов
/ 27 февраля 2019

Я читаю CSV-файл, используя DictReader(), в котором есть данные, подобные приведенным ниже,

NAMES,DATA
Name1,abcd
Name1,efgh
Name1,fgdh
Name2,xjbjk
Name2,flfnd

Я читаю их и вынимаю в два списка,

L1 = ['Name1','Name1','Name1','Name2','Name2']

L2 = ['abcd','efgh','fgdh','xjbjk','flfnd']

НоЯ хочу, чтобы Name1 отображался с соответствующими ему данными, как показано ниже (или в каком-то другом формате, чтобы я мог выполнить итерацию по нему, чтобы получить какое-то конкретное значение)

{'Name1':['abcd','efgh','fgdh'], 'Name2':['xjbjk','flfnd']}

Может ли кто-нибудь предложить какой-либо способ продолжитьэто?

Заранее спасибо !!

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Предполагая, что у вас уже есть два списка ...

L1 = ['Name1','Name1','Name1','Name2','Name2']
L2 = ['abcd','efgh','fgdh','xjbjk','flfnd']

Это работает:

d = {}
for k, v in zip(L1, L2):
    d.setdefault(k, []).append(v)

Примерно так:

>>> d
{'Name1': ['abcd', 'efgh', 'fgdh'], 'Name2': ['xjbjk', 'flfnd']}
0 голосов
/ 27 февраля 2019

DictReader дает вам понять, с чего начать.Постройте свой результат построчно, вместо разделения ввода на два списка.

import collections
from operator import itemgetter

result = collections.defaultdict(list)
get_pair = itemgetter("NAME", "DATA")

with open("tmp.csv") as f:
    d = csv.DictReader(f)
    for row in d:
        name, value = get_pair(result)
        result[name].append(value)

defaultdict гарантирует, что result[name] - это список при первом использовании nameв качестве ключа.get_pair является функцией, эквивалентной

def get_pair(d):
    return d["NAME"], d["DATA"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...