将python字典中的列表值与相关键相关联

2024-05-29 02:26:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个两列制表符分隔的输入,我想在python中填充一个字典。第一列与键关联(存在重复项),第二列与值关联。在

样本输入:

cat tail
cat whisker
cat meow
cat black
dog tail
dog paw
dog bark
bird    beak

我写了下面的代码,它产生了一个(尽管是错误的)输出,其中包含我要查找的字典格式,它将col1中的一个键与col2中的所有值相关联。在

我一直使用的代码是:

^{pr2}$

我已经查阅了其他参考文献 [HERE][HERE]和{a3},但是,所有的建议,包括使用defaultdicts将我带到相同的输出,而不是期望的输出。在

实际输出为:

{'cat': ['tail']}
{'cat': ['tail', 'whisker']}
{'cat': ['tail', 'whisker', 'meow']}
{'cat': ['tail', 'whisker', 'meow', 'black']}
{'dog': ['tail'], 'cat': ['tail', 'whisker', 'meow', 'black']}
{'dog': ['tail', 'paw'], 'cat': ['tail', 'whisker', 'meow', 'black']}
{'dog': ['tail', 'paw', 'bark'], 'cat': ['tail', 'whisker', 'meow', 'black']}
{'bird': ['beak'], 'dog': ['tail', 'paw', 'bark'], 'cat': ['tail', 'whisker', 'meow', 'black']}

期望的输出是

{'bird': ['beak'], 'dog': ['tail', 'paw', 'bark'], 'cat': ['tail', 'whisker', 'meow', 'black']} 

有人能告诉我哪里出错了吗?或者有一个更全面的解决方案,这样最终的结果就是one字典?在


Tags: 代码字典here制表符cattailblack样本
3条回答

假设您已将输入拆分到“\n”

 d = {}
 tab = ['cat tail', 'cat whisker', 'cat meow', 'cat black', 'dog tail', 'dog paw', 'dog bark', 'bird beak']
 for i  in tab:
    try:
        d[i.split(" ")[0]] += [i.split(" ")[1]]
    except KeyError:
        d[i.split(" ")[0]] = [i.split(" ")[1]]

输出

{'bird': ['beak'], 'dog': ['tail', 'paw', 'bark'], 'cat': ['tail', 'whisker', 'meow', 'black']}

您可以检查键是否存在,如果存在,则追加,如果没有,则使用单个元素创建一个列表:

d = {}
with open('a12', 'r') as f:
    for line in f:
        if line.strip():
            a = line.split()
            if a[0] not in d:
                d[a[0]] = [a[1]]
            else:
                d[a[0]].append(a[1])
print d

输出:

^{pr2}$

熊猫:

import pandas as pd

df = pd.read_csv('file_name', header=None, sep='\s+')
print df.groupby(0)[1].apply(list).to_dict()

输出:

{'dog': ['tail', 'paw', 'bark'], 'bird': ['beak'], 'cat': ['tail', 'whisker', 'meow', 'black']}

我假设您有一个名为f_input.txt的输入文件。在

您还可以使用来自itertools模块的groupby,如下例所示:

from itertools import groupby

data = list(k.rstrip().split() for k in open("f_input.txt", 'r'))
final = {}
for k, v in groupby(data, lambda x : x[0]):
    final[k] = list(k[1] for k in list(v))

print(final)

输出:

^{pr2}$

相关问题 更多 >

    热门问题