如何从python中的文本文件中获取词典词典?

如何从python中的文本文件中获取词典词典?,python,python-3.x,file,dictionary,Python,Python 3.x,File,Dictionary,我不知道如何为我几天买了多少水果编一本字典 给定一个如下所示的文本文件 0 apple 0 orange 1 apple 1 apple 1 strawberry 2 orange 第一栏是哪一天买的水果,第二栏是哪一天买的水果 {0: {'apple': 1, 'orange': 1, 'strawberry': 0}, 1: {'apple': 2, 'orange': 0, 'strawberry': 1}, 2: {'apple': 0, 'oran

我不知道如何为我几天买了多少水果编一本字典

给定一个如下所示的文本文件

0    apple
0    orange
1    apple
1    apple
1    strawberry
2    orange
第一栏是哪一天买的水果,第二栏是哪一天买的水果

{0: {'apple': 1, 'orange': 1, 'strawberry': 0}, 1: {'apple': 2, 'orange': 0, 'strawberry': 1}, 2: {'apple': 0, 'orange': 1, 'strawberry': 0}}
我想返回一本字典,其中键是天,值是另一本字典,它记录了那天买了多少水果

{0: {'apple': 1, 'orange': 1, 'strawberry': 0}, 1: {'apple': 2, 'orange': 0, 'strawberry': 1}, 2: {'apple': 0, 'orange': 1, 'strawberry': 0}}

我试图做到这一点,没有列表理解或任何进口,因为我不太明白这些。任何帮助都会很好

使用and类可以简化这个问题。您需要一本字典,其中日数映射到当天水果的
计数器

{0: {'apple': 1, 'orange': 1, 'strawberry': 0}, 1: {'apple': 2, 'orange': 0, 'strawberry': 1}, 2: {'apple': 0, 'orange': 1, 'strawberry': 0}}
来自集合导入计数器,defaultdict
结果=默认DICT(计数器)
将open('filename.txt')作为f:
对于f中的行:
天,水果=line.split()
日=整数(日)
结果[日][果]+=1
使用
defaultdict
Counter
可以省去测试密钥是否存在的麻烦,并在不存在时设置初始值。我不建议仅仅为了它而避免导入,但如果您真的想要一个“纯”的解决方案,那么上面的代码大致可以翻译为:

result=dict()
将open('filename.txt')作为f:
对于f中的行:
天,水果=line.split()
日=整数(日)
如果一天没有结果:
结果[日期]=dict()
如果水果没有结果[天]
结果[日][果]=0
结果[日][果]+=1

使用and类可以简化此问题。您需要一本字典,其中日数映射到当天水果的
计数器

{0: {'apple': 1, 'orange': 1, 'strawberry': 0}, 1: {'apple': 2, 'orange': 0, 'strawberry': 1}, 2: {'apple': 0, 'orange': 1, 'strawberry': 0}}
来自集合导入计数器,defaultdict
结果=默认DICT(计数器)
将open('filename.txt')作为f:
对于f中的行:
天,水果=line.split()
日=整数(日)
结果[日][果]+=1
使用
defaultdict
Counter
可以省去测试密钥是否存在的麻烦,并在不存在时设置初始值。我不建议仅仅为了它而避免导入,但如果您真的想要一个“纯”的解决方案,那么上面的代码大致可以翻译为:

result=dict()
将open('filename.txt')作为f:
对于f中的行:
天,水果=line.split()
日=整数(日)
如果一天没有结果:
结果[日期]=dict()
如果水果没有结果[天]
结果[日][果]=0
结果[日][果]+=1

好吧,我有一个非常简单的解决方案,没有导入和列表理解

final={}
将open('file.txt','r')作为f:
prev=无
对于f.readlines()中的行:
key,value=line.split()
如果prev==无:
prev=键
d={'apple':0,'orange':0,'草莓':0}
埃利夫·普雷夫!=关键:
最终[内部(上一个)]=d
prev=键
d={'apple':0,'orange':0,'草莓':0}
d[value]=d.get(value,0)+1
最终[内部(上一个)]=d
打印(最终版)
我所做的只是创建一个临时的内部字典,然后更新它,直到未达到下一个值,然后如果达到下一个值,则我已将上一个字典添加到最后一个字典。

输出:

{0: {'apple': 1, 'orange': 1, 'strawberry': 0}, 1: {'apple': 2, 'orange': 0, 'strawberry': 1}, 2: {'apple': 0, 'orange': 1, 'strawberry': 0}}

希望有帮助:)

好吧,我有一个非常简单的解决方案,没有导入和列表理解

final={}
将open('file.txt','r')作为f:
prev=无
对于f.readlines()中的行:
key,value=line.split()
如果prev==无:
prev=键
d={'apple':0,'orange':0,'草莓':0}
埃利夫·普雷夫!=关键:
最终[内部(上一个)]=d
prev=键
d={'apple':0,'orange':0,'草莓':0}
d[value]=d.get(value,0)+1
最终[内部(上一个)]=d
打印(最终版)
我所做的只是创建一个临时的内部字典,然后更新它,直到未达到下一个值,然后如果达到下一个值,则我已将上一个字典添加到最后一个字典。

输出:

{0: {'apple': 1, 'orange': 1, 'strawberry': 0}, 1: {'apple': 2, 'orange': 0, 'strawberry': 1}, 2: {'apple': 0, 'orange': 1, 'strawberry': 0}}


希望有帮助:)

你能展示你迄今为止尝试过的任何东西吗?你能展示你迄今为止尝试过的任何东西吗?这太棒了!你知道如何在没有任何导入的情况下完成吗?我已经编辑过,给出了一个没有导入的解决方案,但我建议你习惯使用它们。它们并不高级或更难使用或学习。这些输出的水果计数为零?打印时它们不会输出,但如果使用
计数器
解决方案获得
结果[0]['草莓]
,结果将为0,因为当天没有添加草莓。否则,您将需要一些额外的循环来遍历并将缺少的键添加到每个字典中。这太棒了!你知道如何在没有任何导入的情况下完成吗?我已经编辑过,给出了一个没有导入的解决方案,但我建议你习惯使用它们。它们并不高级或更难使用或学习。这些输出的水果计数为零?打印时它们不会输出,但如果使用
计数器
解决方案获得
结果[0]['草莓]
,结果将为0,因为当天没有添加草莓。否则,您将需要一些额外的循环来遍历并将缺少的键添加到每个字典中。这太棒了!非常感谢你。如果有更多的专栏,我该怎么做?那些我不需要使用的。如果它有更多的列,那么你可以把每一行分割成一个列表,然后只考虑必要的CulnSoh,只注意在输出中缺少第二天。如何添加?给您带来的不便我深表歉意。我在循环后添加了
final[int(prev)]=d,因为如果不这样做,那么最后一天的值就不会得到addedFantastic!如果你有时间,我会帮你的