我有以下清单:
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']我想成为一本以列表为价值的字典。
预期产出:
{'cnhi.test1.com':['1821'], 'test.aiam-test.com': ['3136','54167'], 'test.test-aiops.com': ['3451','52174'], 'test-apt.test-dh.com': ['3136','54167']}具有相同密钥的项目需要合并到一个列表中。
我试过:
dct = {hc_ips[i]: hc_ips[i + 1] for i in range(0, len(hc_ips), 2)}但这只是在制作字典,就像:
{'cnhi.test1.com': '1821', 'test.aiam-test.com': '54167', 'test.test-aiops.com*': '52174', 'test-apt.test-dh.com': '54167'}发布于 2022-02-18 22:14:05
问题是字典每个键只能有一个值,所以当你的字典理解遇到一个已经存在的键时,它会用新的键覆盖旧的值。
还请注意,预期输出中的值是列表,而不是字符串。
因此,要回答您的问题,您需要创建一个字典,其中的值是列表。如果遇到一个已经存在的键,请将该值添加到现有列表中,而不是创建一个新的列表。
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]你得到的是:
{'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)。
import collections
dct = collections.defaultdict(list)
for key, value in zip(hc_ips[::2], hc_ips[1::2]):
dct[key].append(value)这意味着:
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']})https://stackoverflow.com/questions/71180380
复制相似问题