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

use*_*679 4 python dictionary list

我使用的是Python 3.3.我很好奇如何从列表中创建字典:

让我说我的列表包含字符串

list = ['a;alex', 'a;allison', 'b;beta', 'b;barney', 'd;doda', 'd;dolly']
Run Code Online (Sandbox Code Playgroud)

我想把它变成这样的字典:

new_dict = { {'a': {'alex','allison'}}
             {'b': {'beta','barney'}}
             {'d': {'doda', 'dolly'}} }
Run Code Online (Sandbox Code Playgroud)

所以后来我可以这样打印出来:

Names to be organized and printed:
   a -> {'alex', 'allison'}
   b -> {'beta', 'barney'}
   d -> {'doda', 'dolly'}
Run Code Online (Sandbox Code Playgroud)

我该如何处理?提前谢谢了!

-UPDATE-

到目前为止我有这个:

reached_nodes = {}

for i in list:
    index = list.index(i)
    reached_nodes.update({list[index][0]: list[index]})
Run Code Online (Sandbox Code Playgroud)

但它输出到控制台:

{'a': 'a;allison', 'b': 'b;barney', 'd': 'd;dolly'}
Run Code Online (Sandbox Code Playgroud)

Gam*_*iac 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']}
Run Code Online (Sandbox Code Playgroud)

如果您想摆脱它[],请尝试以下方法:

>>> for key, value in var.items():
...     print "{} -> {{{}}}".format(key, ", ".join(value))
a -> {alex, allison}
b -> {beta, barney}
d -> {doda, dolly}
Run Code Online (Sandbox Code Playgroud)

如果您想要a中的值set而不是a list,那么只需执行以下操作:

var = defaultdict(set)
Run Code Online (Sandbox Code Playgroud)

并使用.add而不是.append.