मैं के रूप में डेटा के स्तंभों के शीर्ष पर हेडर के साथ एक csv फ़ाइल है dict में सीएसवी मूल्यों को पढ़ने के लिए ...अधिकांश pythonic तरीका सूचियों
<Header1>, <Header2>, ... ,<HeaderN>
<data11> , <data12> , ... ,<data1N>
<data21> , <data12> , ... ,<data2N>
... , ... , ... , ...
<dataM1> , <dataM2> , ... ,<dataMN>
(यानी मानक सारणीबद्ध डेटा)
जब DictReader
साथ यह पढ़ रहा एक नेस्टेड लूप का उपयोग कर रहा
f = <path_to_some_csv_file.csv>
dr = csv.DictReader(open(f))
dict_of_lists = dr.next()
for k in dict_of_lists.keys():
dict_of_lists[k] = [dict_of_lists[k]]
for line in dr:
for k in dict_of_lists.keys():
dict_of_lists[k].append(line[k])
पहले लूप के रूप में पंक्ति संबंधित कुंजी में सूची में पढ़ा में आइटम संलग्न करने के लिए करने के लिए dict में सभी मान सेट खाली सूची अगला सीएसवी फ़ाइल से पढ़ने वाली प्रत्येक पंक्ति पर लूप करता है, जिससे डिक्ट्रेडर कुंजी-मानों का एक नियम बनाता है। आंतरिक लूप संबंधित कुंजी मान से मेल खाने वाली सूची को जोड़ता है, इसलिए मैं डिक्ट की वांछित सूची के साथ हवा में जाता हूं। मैं इसे काफी बार लिखना चाहता हूं।
मेरा सवाल यह है कि, नेस्टेड लूप के बिना फ़ंक्शंस में निर्मित या बेहतर डेटाियोम या इस डेटा संरचना को स्टोर करने का एक वैकल्पिक तरीका है, जिससे मैं पूछताछ करके एक अनुक्रमणीय सूची वापस कर सकता हूं, ऐसा करने का एक और पाइथोनिक तरीका है। एक महत्वपूर्ण मूल्य के साथ? यदि ऐसा है तो कॉलम को सामने वाले डेटा को प्रारूपित करने का एक तरीका भी है? (एक MWE के लिए बस उपरोक्त डेटा को एक टेक्स्ट फ़ाइल में कॉपी करें और इसे कोड के माध्यम से चलाएं) अग्रिम धन्यवाद!
dict_of_lists = merge_with(list, *csv.DictReader(open(f)))
केवल stdlib का उपयोग करना, एक defaultdict
कोड कम करता है:
'() dict_of_lists.keys में कश्मीर के लिए: -'> 'dict_of_lists में कश्मीर के लिए:' –