我已经尝试过查看这个问题,但我似乎无法找到符合我想要的方式的答案。
到目前为止的代码如下:
dictionary = {}
list = ["this", "is", "my", "list"]
definitions = [1, 2, 3, 4]
dictionary = dict(zip(list,definitions))
print dictionary
输出为:
{'this': 1, 'list': 4, 'is': 2, 'my': 3}
我需要输出格式为
{'this': 1, 'is': 2, 'my': 3', list': 4}
列表不能按字母顺序或数字顺序排序,因为我想要放入的实际值有些随机化。至关重要的是,订单按其列表形式的密钥顺序排序。
我尝试过使用下面的方法,但仍会返回相同的答案
from collections import OrderedDict
OrderedDict(sorted(dictionary.items(), key=lambda t: t[0]))
如果词典不是最好的方式,我更感兴趣的是学习更好的方法
提前致谢
答案 0 :(得分:2)
您需要使用原始订单构建OrdereDict
,并且根本不使用内置dict
:
keys = ["this", "is", "my", "list"]
definitions = [1, 2, 3, 4]
OrderedDict(zip(keys, definitions))
内置dict
类型没有设置顺序,它是无序类型。排序将字母顺序应用于键,而不是原始顺序。
我在这里使用了名称keys
而不是list
来掩盖内置类型。
演示:
>>> from collections import OrderedDict
>>> keys = ["this", "is", "my", "list"]
>>> definitions = [1, 2, 3, 4]
>>> OrderedDict(zip(keys, definitions))
OrderedDict([('this', 1), ('is', 2), ('my', 3), ('list', 4)])
如果您关心的是您的密钥和值已正确配对,已经发生。 zip()
按原始顺序将您的键和值配对,然后从这些配对中创建字典。然后,dict
显示键和值的顺序并不重要,配对不会混淆。
答案 1 :(得分:2)
为什么不直接将数据放入OrderedDict
?
>>> from collections import OrderedDict
>>> data = ["this", "is", "my", "list"] # don't use list as a variable name
>>> d = OrderedDict(zip(data, range(1, 5)))
>>> d
OrderedDict([('this', 1), ('is', 2), ('my', 3), ('list', 4)])
请注意,您当前的尝试会按字母顺序按字母顺序排序键,但您可以这样做:
>>> d2 = dict(zip(data, range(1, 5)))
>>> d2
{'this': 1, 'list': 4, 'is': 2, 'my': 3}
>>> OrderedDict(sorted(d2.items(), key=lambda t: data.index(t[0])))
OrderedDict([('this', 1), ('is', 2), ('my', 3), ('list', 4)])
即。使用index
列表中的data
作为key
的{{1}}。
答案 2 :(得分:0)
我建议你这样做:
import pandas as pd
list = ["this", "is", "my", "list"]
definitions = [1, 2, 3, 4]
df = pd.DataFrame({'definitions':definitions}, index=list)
这是df的样子:
key values
0 this 1
2 is 2
1 my 3
3 list 4
并且:
df.to_json()
给出:
'{"definitions":{"this":1,"is":2,"my":3,"list":4}}'
正如评论中所说,这可能不是更好的方式。但这是一个选择!