Rumah > Soal Jawab > teks badan
[('2016-09', 20874.73, '李四'), ('2016-10', 64296.45, '李四'), ('2016-11', 58657.1, '李四'), ('2016-12', 51253.14, '李四'), ('2017-01', 57791.88, '李四'), ('2017-01', 46007.0, '张三'), ('2017-02', 67193.55, '李四'), ('2017-02', 38352.0, '张三'), ('2017-03', 83359.53, '李四'), ('2017-03', 49661.0, '张三'), ('2017-04', 39907.0, '张三')]
Saya mahu mengeluarkan rentetan data di atas dalam format
[{'data': [['2013-04', 52.9], ['2013-05-01', 50.7]], 'name': '张三'},{'data': [['2013-04', 27.7], ['2013-05-01', 25.9]], 'name': '李四'}]
Dengan format ini, adakah cara lain? Saya telah memikirkannya untuk masa yang lama dan tidak dapat memikirkan cara yang berkesan untuk melakukannya.
伊谢尔伦2017-06-12 09:23:18
# python2
# coding: utf8
a = [('2016-09', 20874.73, '李四'), ('2016-10', 64296.45, '李四'), ('2016-11', 58657.1, '李四'), ('2016-12', 51253.14, '李四'), ('2017-01', 57791.88, '李四'), ('2017-01', 46007.0, '张三'), ('2017-02', 67193.55, '李四'), ('2017-02', 38352.0, '张三'), ('2017-03', 83359.53, '李四'), ('2017-03', 49661.0, '张三'), ('2017-04', 39907.0, '张三')]
s = []
for i in a:
for dict_tmp in s:
if dict_tmp.get('name', '') == i[2]:
dict_tmp['data'].append([i[0], i[1]])
break
else:
s.append(
{
'name': i[2],
'data': [[i[0], i[1]]]
}
)
print s
为情所困2017-06-12 09:23:18
from collections import defaultdict
d = defaultdict(list)
l_data = [('2016-09', 20874.73, '李四'), ('2016-10', 64296.45, '李四'), ('2016-11', 58657.1, '李四'), ('2016-12', 51253.14, '李四'), ('2017-01', 57791.88, '李四'), ('2017-01', 46007.0, '张三'), ('2017-02', 67193.55, '李四'), ('2017-02', 38352.0, '张三'), ('2017-03', 83359.53, '李四'), ('2017-03', 49661.0, '张三'), ('2017-04', 39907.0, '张三')]
for x in l_data:
d[x[2]].append([x[0], x[1]])
result = [{'name': k, 'data': v} for k, v in d.iteritems()]
女神的闺蜜爱上我2017-06-12 09:23:18
Dalam kes ini, modul panda harus digunakan untuk menjadikannya lebih mampan:
data_input = [('2016-09', 20874.73, '李四'), ('2016-10', 64296.45, '李四'), ('2016-11', 58657.1, '李四'), ('2016-12', 51253.14, '李四'), ('2017-01', 57791.88, '李四'), ('2017-01', 46007.0, '张三'), ('2017-02', 67193.55, '李四'), ('2017-02', 38352.0, '张三'), ('2017-03', 83359.53, '李四'), ('2017-03', 49661.0, '张三'), ('2017-04', 39907.0, '张三')]
import pandas as pd
df = pd.DataFrame(data_input)
df.columns = ['month','value','name']
d = df.set_index(['name'])
print ( set(d.index) ) # {'张三', '李四'}
print ( list(d.loc['张三'].values.tolist()) ) # data變成list
print ( [{'data':list(d.loc[x].values.tolist()) , 'name': x} for x in set(d.index) ] )
Barisan terakhir ialah hasil yang anda inginkan. Pada asasnya, ia menggunakan hasil indeks baris ketiga hingga terakhir sebagai asas untuk terbitan senarai untuk menghasilkan kamus yang anda inginkan, yang mengandungi nama dan data, dan data mengandungi data yang disenaraikan dalam senarai
[{'data': [['2016-09', 20874.73],
['2016-10', 64296.45],
['2016-11', 58657.1],
['2016-12', 51253.14],
['2017-01', 57791.88],
['2017-02', 67193.55],
['2017-03', 83359.53]],
'name': '李四'},
{'data': [['2017-01', 46007.0],
['2017-02', 38352.0],
['2017-03', 49661.0],
['2017-04', 39907.0]],
'name': '张三'}]
Jika anda memerlukan lebih banyak pemprosesan data, saya sangat mengesyorkan belajar modul panda.