首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态创建一个以列表为值的字典

动态创建一个以列表为值的字典
EN

Stack Overflow用户
提问于 2022-02-18 22:06:12
回答 1查看 152关注 0票数 0

我有以下清单:

代码语言:javascript
复制
hc_ips = ['cnhi.test1.com', '1821', 'test.aiam-test.com', '3136', 'test.test-aiops.com', '3451', 'test-apt.test-dh.com', '3136', 'test.test-aiops.com', '52174', 'test.aiam-test.com', '54167', 'test-apt.test-dh.com', '54167']

我想成为一本以列表为价值的字典。

预期产出:

代码语言:javascript
复制
{'cnhi.test1.com':['1821'], 'test.aiam-test.com': ['3136','54167'], 'test.test-aiops.com': ['3451','52174'], 'test-apt.test-dh.com': ['3136','54167']}

具有相同密钥的项目需要合并到一个列表中。

我试过:

代码语言:javascript
复制
dct = {hc_ips[i]: hc_ips[i + 1] for i in range(0, len(hc_ips), 2)}

但这只是在制作字典,就像:

代码语言:javascript
复制
{'cnhi.test1.com': '1821', 'test.aiam-test.com': '54167', 'test.test-aiops.com*': '52174', 'test-apt.test-dh.com': '54167'}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-18 22:14:05

问题是字典每个键只能有一个值,所以当你的字典理解遇到一个已经存在的键时,它会用新的键覆盖旧的值。

还请注意,预期输出中的值是列表,而不是字符串。

因此,要回答您的问题,您需要创建一个字典,其中的值是列表。如果遇到一个已经存在的键,请将该值添加到现有列表中,而不是创建一个新的列表。

代码语言:javascript
复制
dct = dict()
for key, value in zip(hc_ips[::2], hc_ips[1::2]):
    if key in dct:
        dct[key].append(value)
    else:
        dct[key] = [value]

你得到的是:

代码语言:javascript
复制
{'cnhi.test1.com': ['1821'],
 'test.aiam-test.com': ['3136', '54167'],
 'test.test-aiops.com': ['3451', '52174'],
 'test-apt.test-dh.com': ['3136', '54167']}

或者,您可以使用collections.defaultdict,这将在您第一次访问密钥时自动创建一个默认值,因此您可以简单地使用.append(value)

代码语言:javascript
复制
import collections
dct = collections.defaultdict(list) 
for key, value in zip(hc_ips[::2], hc_ips[1::2]):
    dct[key].append(value)

这意味着:

代码语言:javascript
复制
defaultdict(list,
            {'cnhi.test1.com': ['1821'],
             'test.aiam-test.com': ['3136', '54167'],
             'test.test-aiops.com': ['3451', '52174'],
             'test-apt.test-dh.com': ['3136', '54167']})
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71180380

复制
相关文章

相似问题

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