【问题标题】:appending multiple values to single key将多个值附加到单个键
【发布时间】:2013-12-13 15:25:18
【问题描述】:

fruits.txt 包含

avocado, green 
apple, yellow 
pear, green 
apple, green

我正在尝试打印从文件创建的字典。我尝试检查密钥是否已经在字典中,如果没有则创建一个新密钥。

打印出来的应该是这样的

green 
     avocado 
     pear 
     apple 
yellow 
     apple 

到目前为止我的代码:

d = {}
file = open("fruits.txt","r")
for line in file:
    (key,val) = line.split()
    if val in d.values():
        d[val].append(key)
    else:
        d[val]=key

print(d)

但这只会打印出来

{'yellow': 'apple,', 'green': 'apple,'}

知道我在这个问题上哪里出错了吗? 谢谢!

【问题讨论】:

    标签: python


    【解决方案1】:
    1. 你可以在这里使用defaultdict
    2. 在处理文件时始终使用with 语句

      from collections import defaultdict
      d = defaultdict(list)
      with open("fruits.txt","r") as inFile:
          for line in inFile:
              k, v = line.rstrip().split()
              d[v].append(k)
      

    如果你不想使用defaultdict,你可以使用dict本身,像这样

    d = {}
    with open("fruits.txt","r") as inFile:
        for line in inFile:
            k, v = line.rstrip().split()
            d.setdefault(v, []).append(k)
    

    【讨论】:

    • 我的教授没有教过 mwe 集合或文件 :( 这是考试复习。谢谢!
    • @user2840144 请立即查看我的答案
    • @user2840144 不客气 :) 如果对您有帮助,请考虑支持并接受此答案。
    • 我认为这段代码不起作用,因为get 无法初始化字典中的键。它返回空列表[],但不创建d[v] = [],然后将k 附加到它。
    【解决方案2】:

    你错过了值的键,拆分字符,你必须使用列表作为值。

    d = {}
    
    file_src = open("fruits.txt","r")
    for line in file_src:
        (val, key) = line.strip().split(", ")
        if d.get(key):
            d[key].append(val)
        else:
            d[key] = [val]
    
    print(d)
    

    由你来格式化最终的字典d,因为这是家庭作业。

    【讨论】:

    • 好的,我跟着你。谢谢!这是期末考试复习题哈哈
    猜你喜欢
    • 1970-01-01
    • 2014-04-22
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多