cari

Rumah  >  Soal Jawab  >  teks badan

Adakah terdapat cara untuk menggunakan python untuk mengeluarkan rentetan data ini dalam format yang saya mahukan?

[('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.

漂亮男人漂亮男人2723 hari yang lalu683

membalas semua(3)saya akan balas

  • 伊谢尔伦

    伊谢尔伦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
    
    

    balas
    0
  • 为情所困

    为情所困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()]

    balas
    0
  • 女神的闺蜜爱上我

    女神的闺蜜爱上我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.

    balas
    0
  • Batalbalas