首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python列表到字典

Python列表到字典
EN

Stack Overflow用户
提问于 2015-09-25 17:58:34
回答 3查看 58关注 0票数 1

我有两个相同数量的索引列表。

代码语言:javascript
运行
复制
eg:
hst = ['host1', 'host2', 'host1', 'host2']
err = ['Tomcat', 'Disk Space', 'MySQL', 'Apache']

我想将其转换为以下格式的字典:

代码语言:javascript
运行
复制
{'host1': ['Tomcat', 'MySQL'], 
 'host2' : ['Disk Space', 'Apache'],
}
EN

回答 3

Stack Overflow用户

发布于 2015-09-25 18:01:09

我会使用zip()函数和dict.setdefault()。示例:

代码语言:javascript
运行
复制
dic = {}
for x,y in zip(hst,err):
    dic.setdefault(x,[]).append(y)

演示-

代码语言:javascript
运行
复制
>>> hst = ['host1', 'host2', 'host1', 'host2']
>>> err = ['Tomcat', 'Disk Space', 'MySQL', 'Apache']
>>> dic = {}
>>> for x,y in zip(hst,err):
...     dic.setdefault(x,[]).append(y)
...
>>> dic
{'host2': ['Disk Space', 'Apache'], 'host1': ['Tomcat', 'MySQL']}

zip()函数在相应的索引处组合两个列表(直到最小数组的索引,但这对您来说不是问题,因为您说我有两个索引数量相等的列表。),所以对于第一次迭代,你会得到x作为'host1',y作为'Tomcat',对于第二次迭代,你会得到x作为'host2',y作为'Disk Space',依此类推。

dict.setdefault(key, default)使用默认值设置键,如果键不存在于字典中,则返回默认值,如果键存在于字典中,则返回其值。

票数 3
EN

Stack Overflow用户

发布于 2015-09-25 18:31:28

collections.defaultdict是对处理重复键的数据进行分组的最有效方式:

代码语言:javascript
运行
复制
from collections import defaultdict

d = defaultdict(list)
hst = ['host1', 'host2', 'host1', 'host2']
err = ['Tomcat', 'Disk Space', 'MySQL', 'Apache']

for k,v in zip(hst,err):
    d[k].append(v)

输出:

代码语言:javascript
运行
复制
defaultdict(<type 'list'>, {'host2': ['Disk Space', 'Apache'],
                           'host1': ['Tomcat', 'MySQL']})
票数 2
EN

Stack Overflow用户

发布于 2015-09-25 18:36:12

简单的EAFP方法:

代码语言:javascript
运行
复制
hst = ['host1', 'host2', 'host1', 'host2']
err = ['Tomcat', 'Disk Space', 'MySQL', 'Apache']


def make_dict(hst, err):
    d = {}
    for h, e in zip(hst, err):
        try:
            d[h].append(e)
        except KeyError:
            d[h] = [e]
    return d


expected = {'host1': ['Tomcat', 'MySQL'], 'host2' : ['Disk Space', 'Apache']}
result = make_dict(hst, err)
assert expected == result
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32779642

复制
相关文章

相似问题

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