如何在python中的文件中添加字典中的多个值

时间:2017-11-30 18:12:41

标签: python python-3.x file dictionary

给定文件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)

3 个答案:

答案 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')}