将python字节列表转换为dictionary



我正在尝试将字节列表转换为字典列表

mylist = [b'Ruby,events_spec.rb,188,5,613n',
b'HTML,index.html,14,0,592n']

类似

[{'Filename':"events_spec.rb","Language":Ruby","Blank Lines":"188","Comment Lines":"5","Code Lines":613},{'Filename':"index.html","Language":HTML","Blank Lines":"14","Comment Lines":"0","Code Lines":592}]

即使"Filename"是列表中的第二个元素"Filename"将成为字典的第一个元素

尝试了一些东西,但没有得到所需的输出

mylist = [b'Ruby,events_spec.rb,188,5,613n',
b'HTML,index.html,14,0,592n']
list1 = ["Filename","Language","Blank Lines","Comment Lines","Code Lines"]
final_list = []
n_dict = {}
for i in mylist:
final_list.append(dict(zip(list1,i.decode("ascii").split(","))))
print(final_list)

非期望输出

[{'Filename': 'Ruby', 'Language': '/Users/hariomsingh/Desktop/ignit/Repo/ignite-chute-analytics-backend/spec/requests/events_spec.rb', 'Blank Lines': '188', 'Comment Lines': '5', 'Code Lines': '613n'}, {'Filename': 'HTML', 'Language': '/Users/hariomsingh/Desktop/ignit/Repo/ignite-chute-analytics-backend/docs/index.html', 'Blank Lines': '14', 'Comment Lines': '0', 'Code Lines': '592n'}

尝试使用OrderedDict

from collections import OrderedDict
mylist = [b'Ruby,/Users/hariomsingh/Desktop/ignit/Repo/ignite-chute-analytics-backend/spec/requests/events_spec.rb,188,5,613n',
b'HTML,/Users/hariomsingh/Desktop/ignit/Repo/ignite-chute-analytics-backend/docs/index.html,14,0,592n']

list1 = ["Filename","Language","Blank Lines","Comment Lines","Code Lines"]
final_list = []
n_dict = OrderedDict()
for i in mylist:
final_list.append(dict(zip(list1,i.decode("ascii").split(","))))
print(final_list)

首先,您必须对关键字进行重新排序,以匹配源数据中元素的位置:

list1 = ["Language","Filename","Blank Lines","Comment Lines","Code Lines"]

那么它就简单到:

mydict = { a : b for a,b in zip( list1, mylist[0].strip().split(',')) }

这给了我们:

{'Blank Lines': '188', 'Comment Lines': '5', 'Code Lines': '613', 'Language': 'Ruby', 'Filename': 'events_spec.rb'}

然后只需要对mylist中的所有元素进行迭代。

我为你写了一些代码,你可以试试这个

mylist = [b'Ruby,events_spec.rb,188,5,613n', b'HTML,index.html,14,0,592n']
new_mylist = []
for mylist_ in mylist:
mylist_ = mylist_.decode('utf-8')
mylist_ = mylist_.replace('n', '')
values = [i for i in mylist_.split(',')]
new_mylist.append(values)
new_mylist_tmp = new_mylist
new_mylist = []
my_dict = {}
for i in new_mylist_tmp:
my_dict = {'Filename':i[1],"Language":i[0],"Blank Lines":int(i[2]),"Comment Lines":int(i[3]),"Code Lines":int(i[4])}
new_mylist.append(my_dict)
print(new_mylist)

您可以使用re模块来获得更好的输出,因为它可以处理,分隔符前后的空格,而简单的split()无法处理这些空格。

import re 
mylist = [b'Ruby,events_spec.rb,188,5,613n',b'HTML,index.html,14,0,592n']
list1 = ["Language", "Filename", "Blank Lines","Comment Lines","Code Lines"]
final_list = []
for i in mylist:        
final_list.append(dict(zip(list1,re.split("s*,s*", i.decode("ascii").strip()))))
print(final_list)

输出:

[{'Blank Lines': '188', 'Code Lines': '613', 'Filename': 'events_spec.rb', 'Language': 'Ruby', 'Comment Lines': '5'}, {'Blank Lines': '14', 'Code Lines': '592', 'Filename': 'index.html', 'Language': 'HTML', 'Comment Lines': '0'}]

最新更新