我有.csv文件,我想将csv转换为dict。 在我的代码下面:
c2:9f:db:67:12:48 c2:9f:db:e7:85:ad 06:27:22:fd:6b:50
-67 -51 -110
我的.csv文件:
{u'c2:9f:db:e7:85:ad': u'-51', u'c2:9f:db:67:12:48': u'-67',u'06:27:22:fd:6b:50': u'-110'}
但我的字典结果是随机的:
{u'c2:9f:db:67:12:48': u'-67', u'c2:9f:db:e7:85:ad': u'-51', u'06:27:22:fd:6b:50': u'-110'}
我希望我的字典结果不是随机的:
WNCK_LIBS
答案 0 :(得分:1)
从Python 3.6开始,字典将保留其插入顺序:https://mail.python.org/pipermail/python-dev/2016-September/146327.html
一种不错的副作用"紧凑的字典是现在的字典 保留插入顺序。
这是副作用"但是,并没有在官方规范中,因此可能无法保证在未来的版本中始终如此。
答案 1 :(得分:0)
根据定义,Python中的词典未订购,因此您无法维护(或依赖)从CSV文件中获取的元素的任何特定顺序。
答案 2 :(得分:0)
没有办法做你想做的事。根据定义,dictionaries in Python are unordered。正如文档所说,
最好将字典视为一组无序的键:值对,并要求键是唯一的(在一个字典中)。
无论条目是通过读取文件还是键入键盘来完成,Python都不关心您将键值对输入字典的顺序,只要每个键都是唯一的。键值对将以任意顺序存储。
这是为什么?这是因为字典存储在哈希表中。对唯一键进行哈希处理,并将键值对存储在结果位置。一个足够好的哈希算法应设计,以使哈希值不可预测。因此,始终按键排序字典的愿望与字典的构建方式是完全相反的。
答案 3 :(得分:0)
如果您想在dict中保留订单,可以使用OrderedDict
:
import csv
from collections import OrderedDict
testo = []
with open('dTest.csv', 'r') as f:
reader = csv.reader(f)
headers = next(reader)
for row in reader:
testo.append(OrderedDict(zip(headers, row)))
print(testo[0])
保证始终具有此输出:
OrderedDict([('c2:9f:db:67:12:48', '-67'), ('c2:9f:db:e7:85:ad', '-51'), ('06:27:22:fd:6b:50', '-110')])
除了订单,OrderedDict
与普通Dict
具有相同的属性,因此您可以例如使用for key in test[0]