在Python中为特定范围创建字典

时间:2016-03-12 01:43:27

标签: python list dictionary

我有以下字典:

d1 = {}

我需要为其分配以下值,但只需为以下列表中的第一个n值:

all_examples=   ['A,1,1', 'B,2,1', 'C,4,4', 'D,4,5']

最终输出:d1={"A":[1,1],"B":[2,1]}

问题的第1版:

  

我有以下字典:

d1 = {'UID': 'A12B4', 'name': 'John', 'email': 'hi@example.com'}
     

如何创建字典d2,使得d2具有d1中前n个键和值?

问题的第二版

  

我有一个以下字典:       d1 = {}

     

我需要为它分配以下值,但只能为以下列表中的前n个值分配:

all_examples=   ['A,1,1', 'B,2,1', 'C,4,4', 'D,4,5']

1 个答案:

答案 0 :(得分:2)

  

如何创建字典d2,使得d2具有d1中前n个键和值?

抱歉,我很抱歉,但你不应该这样做。至少,不是库存dict。原因是dict无法保证订单,只要您添加或删除某个值,dict CAN 的顺序就会发生变化。

但如果你真的坚持可以做到:

>>> d1 = {1:'a', 3:'b', 2:'c', 4:'d'}
>>> d1
{1: 'a', 2: 'c', 3: 'b', 4: 'd'}
>>> d.keys()[:2]
[1, 2]
>>> {k : d[k] for k in d.keys()[:2]}
{1: 'a', 2: 'c'}

但我的建议是使用OrderedDict对象,这将保证dict中元素的顺序:

>>> od = OrderedDict()
>>> od[1] = 'a'
>>> od[3] = 'b'
>>> od[2] = 'c'
>>> od[4] = 'd'
>>> od
OrderedDict([(1, 'a'), (3, 'b'), (2, 'c'), (4, 'd')])
>>> od.keys()[:2]
[1, 3]
>>> OrderedDict([(k, od[k]) for k in od.keys()[:2]])
OrderedDict([(1, 'a'), (3, 'b')])

好的,看起来你刚刚改变了从根本上你的问题,所以这里是新答案:

>>> all_examples=   ['A,1,1', 'B,2,1', 'C,4,4', 'D,4,5']
>>> n = 2
>>> all_examples[:n]
['A,1,1', 'B,2,1']

这里是您如何选择最多n列表值。

再一次,你正在改变你的问题...

Final output: d1={"A":[1,1],"B":[2,1]}
你可以这么做:

>>> {elt[0] : (elt[1], elt[2]) for elt in [elt.split(',') for elt in all_examples[:n]]}
{'A': ('1', '1'), 'B': ('2', '1')}

HTH