繁体   English   中英

如何使用字典为键分配多个值?

[英]How to assign multiple values to a key using dictionaries?

我有一个 csv 文件,其中包含(视频游戏的)名称、平台、流派、出版商等。我正在尝试创建 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)

您应该将genre (例如)条目创建为一个列表,然后将 append 创建到列表中。

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

 D2[genre].append(tup2)

你有非唯一键的问题。

如果该问题得到纠正(您需要唯一键), merge( ) 方法可以与任何其他方式选项(左、右、内...)一起使用。

Pandas 库merge()方法非常强大,可以解决您的问题。

但是,您需要对非唯一键问题做一些事情。

我建议使用方法unique()并为每个DataFrame创建自己的索引列表。 这只是 ETL 流程中的一层。

假设您有两个DataFramesdf_adf_b 此数据帧共享一个名为u_key的唯一键。

与这些数据框的合并过程将类似于:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM