फ़ाइल, प्रत्येक पंक्ति पट्टी और शब्दकोश में कुंजी में जोड़ें

How do we split the first line in a text file and make them as keys, and every line after that are the values for each key. Without any imports

मेरे पास अब तक क्या है:

new_dict = {}
with open(file, 'r') as f:
    for line in f:
        list = line.strip().split(',')
        for item in list:
            new_dict[item] = []

what this outputs: {'name': [], 'last': [], 'middle': []}

अब, मैं अगली पंक्ति पर कैसे जा सकता हूं, अल्पविराम में विभाजित हूं और पहली कुंजी को पहली कुंजी में जोड़ता हूं, दूसरा तत्व दूसरी कुंजी आदि।

file:
name, last, middle
bob, jones, m
jones, bob, k
alice, lol, f

अंत में परिणाम:

{'name': ['bob', 'jones', 'alice'], 'last': ['jones', 'bob', 'lol'], 'middle': ['m', 'k', 'f']}
0
उन्होंने कहा "बिना किसी आयात के।"
जोड़ा लेखक Tim Pierce, स्रोत
क्यों "बिना किसी आयात के"? मैंने अजगर में सोचा कि आप बस "समाधान आयात करें"
जोड़ा लेखक Jinghao Shi, स्रोत

3 उत्तर

answer = {}
for attr in "name last middle".split():
  answer[attr] = []
with open("path/to/input") as infile:
  for line in infile:
    for k,v in zip("name last middle".split(), line.strip().split(',')):
      answer[k].append(v)
0
जोड़ा
new_dict = {}
names = [] # used map 0, 1, 2 to `name`, `last`, `middle`
with open('/path/to/test.txt') as f:

    # Handle header (the first) line: `name, last, middle`
    for name in next(f).split(','): # split fields by `,`
        name = name.strip()  # remove surrounding spaces
        names.append(name)
        new_dict[name] = []  # initialize dictionary with empty list.

    # Handle body.
    for line in f:
        # enumerate(['bob', 'jones', 'm']) return an interator
        #    that generates (0, 'bob'), (1, 'jones'), (2, 'm')
        for i, value in enumerate(line.split(',')):
            new_dict[names[i]].append(value.strip())

print(new_dict)

उत्पादन:

{'middle': ['m', 'k', 'f'], 'last': ['jones', 'bob', 'lol'], 'name': ['bob', 'jones', 'alice']}
0
जोड़ा
इसके लिए धन्यवाद, लेकिन क्या आप मुझे इस भाग को समझा सकते हैं: अगले (f) .split (',') में नाम के लिए: name = name.strip() names.append (name) new_dict [name] = []
जोड़ा लेखक Sc4r, स्रोत
अगला (एफ) क्या करता है? क्या यह पहली बार के बाद अगली पंक्ति है?
जोड़ा लेखक Sc4r, स्रोत
ओह ठीक है अब समझ में आता है, मुझे यकीन नहीं था कि अगला क्या हुआ। क्या आप समेकित भाग को भी समझा सकते हैं?
जोड़ा लेखक Sc4r, स्रोत
@ एससी 4 आर, मैंने कोड में टिप्पणियां जोड़ दीं। अगर यह स्पष्ट नहीं है तो मुझे बताएं।
जोड़ा लेखक falsetru, स्रोत
@ एससी 4 आर, <कोड> अगला (एफ) एक लाइन वापस करें; पहली पंक्ति पाने के लिए प्रयोग किया जाता है। यह f.readline() जैसा है
जोड़ा लेखक falsetru, स्रोत
@ Sc4r, enumerate (x) उत्पन्न करता है .. (0, x [0]) , (1, x [1]) , < कोड> 2, (एक्स [2]) , .... enumerate पायथन दस्तावेज़ से
जोड़ा लेखक falsetru, स्रोत

मुझे लगता है कि तर्क है:

  1. पहली पंक्ति पढ़ें, इसे , पर विभाजित करें।
  2. प्रत्येक मान लें और एक शब्दकोश की कुंजी बनाएं।
  3. शेष पंक्तियां पढ़ें और उन्हें सही 'कॉलम' या कुंजी से संबंधित सूची में जोड़ें।

उपर्युक्त तर्क के लिए यहां एक दृष्टिकोण है:

d = {}
with open('somefile.txt') as f:
   first_line = next(f)
   for column_title in first_line.split(','):
       d[column_title.strip()] = []
   for line in f:
       if line.strip():
           # this will skip blanks
           name, last, middle = line.split(',')
           d['name'].append(name.strip())
           d['last'].append(last.strip())
           d['middle'].append(middle.strip())
0
जोड़ा