【问题标题】:Making a dictionary from a list of strings (creating keys from the elements of the list)从字符串列表创建字典(从列表元素创建键)
【发布时间】:2014-02-10 16:20:36
【问题描述】:

我正在使用 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'}

【问题讨论】:

  • 到目前为止你有没有尝试过?如果是这样,你能提供你的代码吗?
  • 您到底需要什么?是从字符串中提取键值的问题吗?向字典插入条目?
  • 几乎是一个骗子:stackoverflow.com/questions/5378231/…

标签: python list dictionary


【解决方案1】:

嗯,你可以使用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

【讨论】:

  • @Ffisegydd 这很容易安排。
  • @Ffisegydd 完成。希望这就足够了,但我认为 OP 没有提到他/她的确切需求,所以我选择了 list 而不是 set。
  • 当然,+1 :D 出于某种原因,OP 确实需要一套只是偶然的机会。
  • 谢谢!有用。但是有没有机会强制按字母顺序打印出来?
  • 只需遍历字典并对每个列表进行排序。
猜你喜欢
  • 2016-12-02
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多