给定文件data.txt: 如果国家/地区名称及其人口和地区列表,该文件如下所示:
China|1,339,190,000|9,596,960.00
Brazil|193,364,000|8,511,965.00
Japan|127,380,000|377,835.00
Canada|34,207,000|9,976,140.00
Indonesia|260,581,100|1,809,590.97
我想创建一个包含国家/地区名称(密钥)和两个值(人口和区域)的字典。
,最终输出应该是这样的:
China:[1339190000,9596960.00]
如果人口是一个整数,而且该区域是一个浮点数。
这是我的代码,我不知道我做错了什么,我想知道是否有人可以为我指出。
感谢。
这是我的代码:
Country = {}
file = open("data.txt", "r")
for i in file :
file1 = i.strip(",")
parts = i.split("|")
length = len(file[i])
if length in parts:
Country[length][i] = file[i]
else:
Country[length] = {i: file[i]}
print(parts)
答案 0 :(得分:2)
您可以使用pandas read_csv并使用千位分隔符。
import pandas as pd
cols = ['Country','Pop','Area']
df = pd.read_csv(filename,sep="|",thousands=r',',header=None,names=cols,index_col=cols[0])
d = {t[0]:t[1:] for t in df.itertuples()}
d现在是一个词典:
{'Brazil': (193364000, 8511965.0),
'Canada': (34207000, 9976140.0),
'China': (1339190000, 9596960.0),
'Indonesia': (260581100, 1809590.97),
'Japan': (127380000, 377835.0)}
旧代码
d = df.to_dict('i') # returns float instead of int
d = {t[0]:dict(zip(df.columns,t[1:])) for t in df.itertuples()} # use this instead
{'Brazil': {'Area': 8511965.0, 'Pop': 193364000},
'Canada': {'Area': 9976140.0, 'Pop': 34207000},
'China': {'Area': 9596960.0, 'Pop': 1339190000},
'Indonesia': {'Area': 1809590.97, 'Pop': 260581100},
'Japan': {'Area': 377835.0, 'Pop': 127380000}}
答案 1 :(得分:1)
{China:1339190000:9596960.00}
语法无效;但是,你可以试试这个:
file_data = [i.strip('\n').split('|') for i in open('filename.txt')]
final_data = {i[0]:[c for c in map(float, [''.join(b.split(',')) for b in i[1:]])] for i in file_data}
输出:
{'Japan': [127380000.0, 377835.0], 'Canada': [34207000.0, 9976140.0], 'Brazil': [193364000.0, 8511965.0], 'Indonesia': [260581100.0, 1809590.97], 'China': [1339190000.0, 9596960.0]}
答案 2 :(得分:1)
您还可以编写一个简单的函数,该函数将文件作为输入并返回包含数据的字典。有很多不同的方法可以解决这个问题,唯一的限制是创造力。希望这会有所帮助:)
def text_to_dict(filename):
with open(filename, 'r') as file:
data = file.read()
line = data.split('\n')
result = {}
for item in line:
item_list = item.split('|')
result[item_list[0]] = item_list[1], item_list[2]
return result
print(text_to_dict('data.txt')) # Calling our function
# Output: {'China': ('1,339,190,000', '9,596,960.00'), 'Brazil': ('193,364,000', '8,511,965.00'), 'Japan': ('127,380,000', '377,835.00'), 'Canada': ('34,207,000', '9,976,140.00'), 'Indonesia': ('260,581,100', '1,809,590.97')}