Как назначить несколько значений ключу с помощью словарей? - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть CSV-файл, который содержит название (видеоигры), платформу, жанр, издатель и т. Д. c. Я пытаюсь создать 3 отдельных словаря. Первый словарь был легким, поскольку используемый ключ был названием видеоигры, которая уникальна.

У 2-го и 3-го словаря возникли проблемы, поскольку ключи "Genre" и "Publisher" не являются уникальными. Я пытаюсь, чтобы D2 выглядело так:

D2 = { 'Puzzle' : [(tup2),(tup2], 'Another genre': [(tup2)]...}

Так как существует несколько игр одного жанра.

import csv

fp = open("video_game_sales_tiny.csv", 'r')
fp.readline()
reader = csv.reader(fp)

D1 = {}
D2 = {}
D3 = {}

for line in reader:
    name = line[0].lower().strip()
    platform = line[1].lower().strip()

    if line[2] in (None, 'N/A'):
        pass
    else:
        year = int(line[2])

    genre = line[3].lower().strip()
    publisher = line[4]
    na_sales = float(line[5])
    europe_sales = float(line[6])*1000000
    japan_sales = float(line[7])*1000000
    other_sales = float(line[8])*1000000

    global_sales = (europe_sales + japan_sales + other_sales)
    tup = (name,platform, year,genre, publisher, global_sales)
    tup2 = (genre, year, na_sales, europe_sales, japan_sales, other_sales, global_sales)
    tup3 = (publisher, name, year, na_sales, europe_sales, japan_sales, other_sales, global_sales)

    D1[name] = tup
    D2[genre] = tup2
    D3[publisher] = tup3

print(D1)
print(D2)
print(D3)

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Вы должны создать запись для genre (например) как список, а затем добавить к списку.

 if not genre in D2:
      D2[genre] = []

 D2[genre].append(tup2)
0 голосов
/ 14 апреля 2020

У вас проблема с неуникальными ключами.

Если эта проблема исправлена ​​(вам нужны уникальные ключи), метод merge() можно использовать с любыми другими параметрами how (left, right, inner, ...).

Метод Pandas Library merge() очень мощный и решит вашу проблему.

Но вам нужно что-то сделать с проблемой неуникальных ключей.

Я предлагаю использовать метод unique() и составить собственный список индексов для каждого DataFrame. Это будет только еще один слой в вашем процессе ETL.

Предположим, у вас есть два DataFrames: df_a и df_b. Эти кадры данных имеют уникальный ключ u_key.

Процесс слияния с этими кадрами данных будет выглядеть примерно так:

import pandas as pd
...
left_merge = pd.merge(df_a, df_b, on=["u_key"], how="left")
...