从字符串列表创建字典(使用列表元素创建键)

4
我正在使用Python 3.3。我想知道如何将列表转换为字典:
假设我的字符串列表如下:
list = ['a;alex', 'a;allison', 'b;beta', 'b;barney', 'd;doda', 'd;dolly']

我想把它制作成像这样的词典条目:
new_dict = { {'a': {'alex','allison'}}
             {'b': {'beta','barney'}}
             {'d': {'doda', 'dolly'}} }

所以之后我可以像这样打印出来:
Names to be organized and printed:
   a -> {'alex', 'allison'}
   b -> {'beta', 'barney'}
   d -> {'doda', 'dolly'}

我该如何处理这个问题?非常感谢!
-更新-
到目前为止,我有这个:
reached_nodes = {}

for i in list:
    index = list.index(i)
    reached_nodes.update({list[index][0]: list[index]})

但它在控制台输出为:
{'a': 'a;allison', 'b': 'b;barney', 'd': 'd;dolly'}

1
你有尝试过什么吗?如果有的话,能提供一下你的代码吗? - Ffisegydd
你需要什么?问题是从字符串中提取键值吗?还是要将条目插入字典中? - idanshmu
这基本上是一个重复的问题:https://dev59.com/cm435IYBdhLWcg3wfgQf?rq=1 - some1
1个回答

5

好的,您可以使用defaultdict

>>> from collections import defaultdict
>>> l = ['a;alex', 'a;allison', 'b;beta', 'b;barney', 'd;doda', 'd;dolly']
>>> var = defaultdict(list)
>>> for it in l:
    a, b = it.split(';')
    var[a].append(b)
>>> var
defaultdict(<type 'list'>, {'a': ['alex', 'allison'], 'b': ['beta', 'barney'], 'd': ['doda', 'dolly']})
>>> for key, item in var.items():
...     print "{} -> {{{}}}".format(key, item)
...     
a -> {['alex', 'allison']}
b -> {['beta', 'barney']}
d -> {['doda', 'dolly']}

如果您想摆脱 [],请尝试以下方法:
>>> for key, value in var.items():
...     print "{} -> {{{}}}".format(key, ", ".join(value))
a -> {alex, allison}
b -> {beta, barney}
d -> {doda, dolly}

如果你想要一个 set 而不是一个 list,那么只需按照以下方式操作:

var = defaultdict(set)

请使用.add代替.append

谢谢!它有效。但是有没有办法强制按字母顺序打印它们? - user2559679
@user2559679 是的,你可以很容易地通过对每个列表进行排序来实现,因此在打印“value”之前,你只需使用“value.sort()”进行排序即可。 - Games Brainiac
哦,抱歉表述不清。我想强制按字母顺序排序键。有时我得到a,b,d。其他时候我会得到b,d,a。 - user2559679
@user2559679,你可以提出一个单独的问题,这样你就可以更好地解释你想要什么了。评论可能会有问题。 - Games Brainiac
对不起,下次我会记住的。我明白了。在打印之前,我通过sorted(var.items())按字母顺序排序了键。非常感谢! - user2559679
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接