2015-08-21 10 views
6

में छंटाई पाठ फ़ाइल मैं फ़ाइल का नाम है "names.txt" होने निम्नलिखित सामग्री:पार्सिंग, समेकित करना और अजगर

{"1":[1988, "Anil 4"], "2":[2000, "Chris 4"], "3":[1988, "Rahul 1"], 
"4":[2001, "Kechit 3"], "5":[2000, "Phil 3"], "6":[2001, "Ravi 4"], 
"7":[1988, "Ramu 3"], "8":[1988, "Raheem 5"], "9":[1988, "Kranti 2"], 
"10":[2000, "Wayne 1"], "11":[2000, "Javier 2"], "12":[2000, "Juan 2"], 
"13":[2001, "Gaston 2"], "14":[2001, "Diego 5"], "15":[2001, "Fernando 1"]} 

समस्या बयान: फ़ाइल "names.txt" प्रारूप में कुछ छात्र रिकॉर्ड में शामिल है -

{"number": [year of birth, "name rank"]}

इस फाइल को पार्स और वर्ष के अनुसार उन्हें अलग और फिर रैंक के अनुसार नामों को सॉर्ट। पहला अलगाव और फिर सॉर्टिंग। आउटपुट प्रारूप में होना चाहिए -

{year : [Names of students in sorted order according to rank]} 

तो उम्मीद उत्पादन होता है -

{1988:["Rahul 1","Kranti 2","Rama 3","Anil 4","Raheem 5"], 
2000:["Wayne 1","Javier 2","Jaan 2","Phil 3","Chris 4"], 
2001:["Fernando 1","Gaston 2","Kechit 3","Ravi 4","Diego 5"]} 

पहले कैसे एक शब्दकोश वस्तु में इस फ़ाइल की सामग्री स्टोर करने के लिए? फिर वर्ष & द्वारा समूहबद्ध करना फिर रैंक द्वारा नामों का ऑर्डर करना? पायथन में इसे कैसे प्राप्त करें?

धन्यवाद ..

+5

संदेह से होमवर्क की तरह लगता है। लेकिन हाथ देने के लिए, मैं 'जेसन' मॉड्यूल को देखने का सुझाव दूंगा, जो उस सामग्री को पायथन में पढ़ेगा, फिर आप इसे एक पायथन शब्दकोश के रूप में संशोधित कर सकते हैं, फिर आप इसे फिर से 'json' – CasualDemon

+0

में फ़ाइल में आउटपुट कर सकते हैं फिर इस सूची को एक शब्दकोश में कनवर्ट करें, शायद dict.fromkeys() मदद कर सकता है, या आप अपना स्वयं का फ़ंक्शन/कोड व्यवस्थित कर सकते हैं। हालांकि मैं जेसन पर या तो पायथन 2 या पायथन 3 पर एक नज़र डालने की सलाह देता हूं। – Llopis

+1

"मेरे होमवर्क प्रश्न" के लिए +7 अपवॉट्स वैध नहीं हैं। –

उत्तर

1

इसका बहुत सरल :)

#!/usr/bin/python 
# Program: Parsing, Aggregating & Sorting text file in Python 
# Developed By: Pratik Patil 
# Date: 22-08-2015 

import pprint; 

# Open file & store the contents in a dictionary object 
file = open("names.txt","r"); 
file_contents=eval(file.readlines().pop(0)); 

# Extract all lists from file contents 
file_contents_values=file_contents.values(); 

# Extract Unique Years & apply segregation 
year=sorted(set(map(lambda x:x[0], file_contents_values))); 
file_contents_values_grouped_by_year = [ [y[1] for y in file_contents_values if y[0]==x ] for x in year]; 

# Create Final Dictionary by combining respective keys & values 
output=dict(zip(year, file_contents_values_grouped_by_year)); 

# Apply Sorting based on ranking 
for NameRank in output.values(): 
    NameRank.sort(key=lambda x: int(x.split()[1])); 

# Print Output by ascending order of keys 
pprint.pprint(output); 
-1

अलगाव एक सरल पाश में एक collections.defaultdict के साथ किया जा सकता है। फिर छात्रों के ऊपर एक और लूप छात्र प्रविष्टियों के अंतिम भाग के पूर्णांक मूल्य के अनुसार उन्हें क्रमबद्ध करने के लिए सूचीबद्ध करता है। और pprint() प्रिंट वांछित ouput अगर हम एक नियमित रूप से एक में defaultdict कन्वर्ट:

#!/usr/bin/env python 
from __future__ import absolute_import, division, print_function 
import json 
from collections import defaultdict 
from pprint import pprint 


def main(): 
    with open('test.json') as student_file: 
     id2student = json.load(student_file) 
    # 
    # Segregate by year. 
    # 
    year2students = defaultdict(list) 
    for year, student_and_rank in id2student.itervalues(): 
     year2students[year].append(student_and_rank.encode('utf8')) 
    # 
    # Sort by rank. 
    # 
    for students in year2students.itervalues(): 
     students.sort(key=lambda s: int(s.rsplit(' ', 1)[-1])) 

    pprint(dict(year2students)) 


if __name__ == '__main__': 
    main() 
+0

कृपया डाउनवोट के लिए स्पष्टीकरण। – BlackJack

संबंधित मुद्दे