python - 当相同的键出现多次时将文本文件转换为字典
问题描述
我有一个如下所示的文本文件:
tomato 7000
potato and pear 8000
prunes 892
tomato 8
carrot 600
prunes 3
为了把它变成一个忽略有更多单词的行的字典(这是我想要的,所以potato and pear
被忽略,这很好),我写道:
with open("C:\\path\\food.txt", encoding="utf-8") as f_skipped:
result = {}
for line in f_skipped:
try:
k, v = line.split()
except ValueError:
pass
else:
result[k] = v
但是由于不能有重复的键,所以它取后面出现的值,所以tomato
和分别prunes
有值8
和3
。有没有办法只接受第一次出现而忽略后面一次?
我想保留我的代码,只是把文本翻过来(听起来有点傻)或检测是否有重复的单词(后者有点冒险,因为有很多行有很多我只想忽略的单词)。
解决方案
如果键不退出,则尝试此.get(key)
方法的字典将返回,否则返回键的值。None
所以你可以在 if 条件下使用它。我希望通过阅读您的问题,这是您想要的。
filename = "text.txt"
with open(filename, encoding="utf-8") as f_skipped:
result = {}
for line in f_skipped:
try:
k, v = line.split()
except ValueError:
pass
else:
if result.get(k) is None:
result[k] = v
print(result)
输出
py code.py
{'tomato': '7000', 'prunes': '892', 'carrot': '600'}
推荐阅读
- html - 如何设置按钮背景图像的高度和宽度?
- javascript - 如何使用来自ajax的html响应重定向到另一个页面?
- python - 刚开始学习,我的第一个作业被难住了
- python - Pygame在移动时正在改变矩形的大小
- amazon-web-services - 发送通知消息以验证是否所有记录都已在 dynamoDB 中处理的最佳 aws 方法是什么
- flutter - 小部件与 UI 组件有何不同?
- virsh - 解析 virsh 输出
- java - 为什么要两个列表
- azure-devops - 在不属于先前分支的分支上获取所有提交
- c++ - 为什么我们在 C++ 项目中需要头文件?