[英]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 流程中的一层。
假设您有两个DataFrames
: df_a
和df_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.