2017-10-13 7 views
2

J'ai ci-dessous la liste des dictionnaireconvertir une liste de dictionnaire dans la liste de dictionnaire en utilisant le groupe par date

Data= [ 
    { 
     "Date": "Fri, 13 Oct 2017 00:00:00 GMT", 
     "In_Time": "Fri, 13 Oct 2017 13:10:00 GMT", 
     "Owner_Name": "Ashish Bainade" 
    }, 
    { 
     "Date": "Fri, 13 Oct 2017 00:00:00 GMT", 
     "In_Time": "Fri, 13 Oct 2017 13:03:00 GMT", 
     "Owner_Name": "Akshara Bainade" 
    }, 
          { 
     "Date": "Fri, 12 Oct 2017 00:00:00 GMT", 
     "In_Time": "Fri, 12 Oct 2017 13:03:00 GMT", 
     "Owner_Name": "Sam" 
    } 

] 

Je veux convertir en liste personnalisée de dictionnaire & avec le groupe par date. sortie de l'échantillon est

   "Data": 
      [ 
       { 
          "Visitors":[ 
           { 
                  "In_Time": "Fri, 13 Oct 2017 13:10:00 GMT", 
                  "Owner_Name": "Ashish Bainade" 
              }, 
              { 
                  "In_Time": "Fri, 13 Oct 2017 13:03:00 GMT", 
                  "Owner_Name": "Akshara Bainade" 
              } 
          ], 
          "Date": "Fri, 13 Oct 2017 00:00:00 GMT" 
       }, 
       { 
          "Visitors":[ 
           { 
                  "In_Time": "Fri, 12 Oct 2017 13:10:00 GMT", 
                  "Owner_Name": "sam" 
              } 
          ], 
          "Date": "Fri, 13 Oct 2017 00:00:00 GMT" 
       } 

] 

J'ai essayé d'utiliser la fonction de itertools mais ne pas obtenir le résultat attendu.

Le code que j'ai utilisé:

from itertools import groupby 
group_by_field = 'Date' 
f = lambda x: x[group_by_field] 
response = [ item for item in groupby(sorted(Data, key=f), f) ] 
print response 
[('Fri, 12 Oct 2017 00:00:00 GMT', <itertools._grouper object at 0x000000000288E2B0>), ('Fri, 13 Oct 2017 00:00:00 GMT', <itertools._grouper object at 0x000000000288E1D0>)] 
+0

'groupby' exige « mêmes » éléments pour être à côté de l'autre, par exemple, il est généralement une bonne idée de faire un tri selon la même clé avant regroupement. Avez-vous essayé cela, et cela fonctionne-t-il alors? Pouvez-vous nous montrer votre code actuel qui ne fonctionne pas? –

+0

quelle version de python: 2, ou 3? – Jaxian

+0

version j'utilise 2.7.12 –

Répondre

2

Votre code est pas loin de la marque, mais au lieu de simplement recueillir les résultats dans une compréhension de la liste, vous devez utiliser un liste- mixte et de compréhension dictionnaire créer les dicts internes des listes de dicts. Essayez ceci:

f = lambda x: x['Date'] 
res = [{"Date": key, "Visitors": [{k: d[k] for k in d if k != "Date"} for d in group]} 
     for key, group in itertools.groupby(sorted(Data, key=f), f)] 

Le résultat est alors res

[{'Date': 'Fri, 12 Oct 2017 00:00:00 GMT', 
    'Visitors': [{'In_Time': 'Fri, 12 Oct 2017 13:03:00 GMT', 
       'Owner_Name': 'Sam'}]}, 
{'Date': 'Fri, 13 Oct 2017 00:00:00 GMT', 
    'Visitors': [{'In_Time': 'Fri, 13 Oct 2017 13:10:00 GMT', 
       'Owner_Name': 'Ashish Bainade'}, 
       {'In_Time': 'Fri, 13 Oct 2017 13:03:00 GMT', 
       'Owner_Name': 'Akshara Bainade'}]}]