(Python) Заполнение словаря конкретными элементами - PullRequest
0 голосов
/ 01 июля 2018

Я немного растерялся и не могу найти похожий вопрос. Может быть, потому что я не знаю, как его искать.

Я хочу импортировать файл names.csv, который содержит в структуре несколько имен: ID, Имя, Пол, Год, Состояние, Количество

Теперь я пытаюсь записать все имена и count целые числа в словарь, который я называю names. Я не понимаю, почему он теперь постоянно возвращает мне пустой словарь.

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

Кто-нибудь может помочь? К сожалению, я действительно новичок и не могу с собой поделать ...

with open("../data/names.csv") as file:
names = {}

for lines in file:
    data = lines.strip().split(",")
    name = data[1]
    count = data[5]
    if name == "Name":
        continue
    for name, count in names.items():
        if name in names:
            names[name] = names[name] + count
        else:
            names[name] = count

print(names)

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Во-первых, вы должны избегать синтаксического анализа файла CSV самостоятельно, это может стать довольно сложно, например, когда цитаты участвуют. Есть встроенный модуль CSV

В вашем случае я бы использовал панд . Функция .groupby() вместе с .sum() будет делать именно то, что вы хотите:

import pandas as pd
df = pd.read_csv('names.csv')
print(df[['Name', 'Count']].groupby('Name').sum())
0 голосов
/ 01 июля 2018

Лучше использовать defaultdict из стандартной библиотеки Python ( для подробной информации ) и для работы с CSV-файлами CSV-модуля ( для подробной информации )

from collections import defaultdict

food_list = 'spam spam spam spam spam spam eggs spam'.split()
food_count = defaultdict(int) # default value of int is 0
for food in food_list:
    food_count[food] += 1 # increment element's value by 1

food_count

в результате вы получите:

defaultdict(<type 'int'>, {'eggs': 1, 'spam': 7})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...