通过理解创建Python字典

时间:2017-10-19 13:55:05

标签: python dictionary

由于某些原因,我从列表中生成的字典似乎不是每次都添加一个新的密钥对,而是只覆盖同一对。我很确定这里可能很明显很多,但是我只是没有看到它,任何帮助指出都会受到赞赏。

以下是数据和代码段

forest_root = 'domain4.co.uk'

domains = ['domain:domain1.co.uk', 'domain:domain2.co.uk', 'domain:domain3.co.uk', 'domain:domain4.co.uk']

dict1 = {forest_root: [dict(domain.split(":", 1) for domain in domains)] }

print dict1

输出

{"domain4.co.uk": [{"domain": "domain4.co.uk"}]}

预期OutPut

{"domain4.co.uk": 
               [
               "domain": "domain4.co.uk",
               "domain": "domain1.co.uk",
               "domain": "domain2.co.uk",
               "domain": "domain3.co.uk",
               ]
}

发布回复

谢谢大家,我现在可以看到我做错了什么,并了解如何实现我的预期结果。

4 个答案:

答案 0 :(得分:4)

也许你需要一个嵌套的dict,如下所示:

forest_root = 'domain4.co.uk'

domains = ['domain:domain1.co.uk', 'domain:domain2.co.uk', 'domain:domain3.co.uk', 'domain:domain4.co.uk']

dict1 = {forest_root: [{d[0]: d[1]} for d in [domain.split(":", 1) for domain in domains]] }

print dict1

输出

{'domain4.co.uk': [{'domain': 'domain1.co.uk'}, {'domain': 'domain2.co.uk'}, {'domain': 'domain3.co.uk'}, {'domain': 'domain4.co.uk'}]}

答案 1 :(得分:2)

我认为问题是内部字典在这种情况下是一个糟糕的数据结构。显然,您需要使用相同密钥的多个不同条目,这对于词典是不可能的。

你可以尝试的事情:

内部循环可以是元组对:

dict1 = {forest_root: [domain.split(":", 1) for domain in domains] }

或创建一个字典,查找与同一个键对应的项目列表。

不清楚哪种更好会因为这些类型的事情的选择取决于您的用例的需求

答案 2 :(得分:0)

为什么你想要一个所有键都相同的字典?字典不能以这种方式工作,而且你实际上 不能使用这些信息。

所以你想要的是:

{forest_root: [d.split(':', 1)[-1] for d in domains]}

答案 3 :(得分:0)

forest_root = 'domain4.co.uk'

domains = ['domain:domain1.co.uk', 'domain:domain2.co.uk', 'domain:domain3.co.uk', 'domain:domain4.co.uk']
dict1 = {forest_root: [{domain.split(":", 1)[0]: domain.split(":",1)[1]} for domain in domains]}

print(dict1)

输出:

{'domain4.co.uk': [{'domain': 'domain1.co.uk'}, {'domain': 'domain2.co.uk'}, {'domain': 'domain3.co.uk'}, {'domain': 'domain4.co.uk'}]}