首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将python字典中的列表值与相关键关联

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

Stack Overflow用户
提问于 2017-01-27 15:10:27
回答 4查看 914关注 0票数 0

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

样本输入:

代码语言:javascript
复制
cat tail
cat whisker
cat meow
cat black
dog tail
dog paw
dog bark
bird    beak

我编写了以下代码,它生成一个(尽管是错误的)输出,其中包含我要查找的字典格式,它将one键从col1与其col2中的所有值关联起来。

我一直使用的代码是:

代码语言:javascript
复制
#!/usr/bin/python
# -*- coding: utf-8 -*-

keys = []
values = []

with open('animal-trial', "rU") as f:
    for line in f:
        line = line.split()
        keys.append(line[0])
        values.append(line[1])
    d = {}
    for k,v in zip(keys, values):
        d.setdefault(k, []).append(v)
    print d

我查阅了其他参考资料 [HERE][HERE][HERE],但是,所有的建议,包括defaultdicts,都将我带到相同的输出,而不是期望的输出。

的实际输出是:

代码语言:javascript
复制
{'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']}

所需的输出是

代码语言:javascript
复制
{'bird': ['beak'], 'dog': ['tail', 'paw', 'bark'], 'cat': ['tail', 'whisker', 'meow', 'black']} 

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-01-27 15:14:28

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

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
{'cat': ['tail', 'whisker', 'meow', 'black'], 'bird': ['beak'], 'dog': ['tail', 'paw', 'bark']}

熊猫:

代码语言:javascript
复制
import pandas as pd

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

输出:

代码语言:javascript
复制
{'dog': ['tail', 'paw', 'bark'], 'bird': ['beak'], 'cat': ['tail', 'whisker', 'meow', 'black']}
票数 2
EN

Stack Overflow用户

发布于 2017-01-27 15:17:50

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

您还可以从groupby模块中使用itertools,如下例所示:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
{'bird': ['beak'], 'dog': ['tail', 'paw', 'bark'], 'cat': ['tail', 'whisker', 'meow', 'black']}
票数 1
EN

Stack Overflow用户

发布于 2017-01-27 15:24:35

假设您在"\n“上拆分了您的输入

代码语言:javascript
复制
 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]]

输出

{‘鸟’:‘喙’,‘狗’:‘尾巴’,‘爪子’,‘吠’,‘猫’,‘尾巴’,‘胡须’,‘喵’,‘黑’}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41897111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档