我有一个清单:
list = [ '1', '1,'1', '-1','1','-1' ]
并需要将其转换为字典字典。前三个值是x y z,第二个三个值是x y z。结果应该是:
d = { 0:{x:1,y:1,z:1}, 1:{x:-1,y:1,z:-1}}
我的尝试:
mylist=[1,1,1,-1,1,-1]
count = 1
keycount = 0
l = {'x':' ','y':' ', 'z':' '}
t = {}
for one in mylist:
if count == 1:
l['x'] = one
print l
if count == 2:
l['y'] = one
print l
if count == 3:
l['z'] = one
print l
count = 0
t[keycount] = l
l = {}
keycount += 1
count = count + 1
print t
但结果却切换了字典中的一些键?有没有人有更好的解决方案?
答案 0 :(得分:3)
有点复杂:
l = [ '1', '1', '1', '-1', '1', '-1' ]
dicts = [dict(zip(['x', 'y', 'z'], l[i:i+3])) for i in range(0, len(l), 3)]
result = dict(enumerate(dicts))
print result #prints {0: {'y': '1', 'x': '1', 'z': '1'}, 1: {'y': '1', 'x': '-1', 'z': '-1'}}
答案 1 :(得分:1)
字典项目无序。
但是,Python 2.7引入了OrderedDict
,它保留了添加项目的顺序。
你可以这样做:
>>> from collections import OrderedDict
>>> d = {}
>>> k = ('x', 'y', 'z')
>>> for i,j in enumerate(range(0, len(mylist), 3)):
... d[i] = OrderedDict(zip(k, l[j:j+3]))
...
>>> d
{0: OrderedDict([('x', '1'), ('y', '1'), ('z', '1')]), 1: OrderedDict([('x', '-1'), ('y', '1'), ('z', '-1')])}
但通常没有理由订购物品。无论如何,您都可以通过d[0]['x']
访问该值,并且项目的顺序无关紧要。
但是,如果您想按顺序排列d
中的项目,建议您使用list
而不是字典。你的密钥只是数字,不需要字典。
答案 2 :(得分:0)
d = {}
for i in range(len(myList)/3):
d[i] = {'x':myList[3*i], 'y':myList[3*i+1], 'z':myList[3*i+2]}
答案 3 :(得分:0)
对于Python 3:
>>> from itertools import cycle
>>>
>>> alist = ['1', '1', '1', '-1', '1', '-1']
>>>
>>> dict(enumerate(map(dict, zip(*[zip(cycle('xyz'), map(int, alist))] * 3))))
{0: {'y': 1, 'x': 1, 'z': 1}, 1: {'y': 1, 'x': -1, 'z': -1}}
我知道这太可怕了,但还是......