0

以下のデータを、最初の列を ID 番号とし、残りの要素を値とするディクショナリに変換したい

EDF768, Bill Meyer, 2456, Vet_Parking

TY5678, Jane Miller, 8987, AgHort_Parking

GEF123, Jill Black, 3456, Creche_Parking

これまでのところ、ファイルを開いてデータをリストに変換しました。しかし、シーケンスが長すぎると述べているため、辞書に変換できません。

def createNameDict():
      file = open("C:\Users\user\Desktop\\ParkingData_Part2.txt","rt")
      contents = file.read()
      print contents,"\n"
      data_list = [line.split(",")  for line in contents.split("\n")]
      print data_list, "\n"
      dict_list = []
      data_dict = {}
      for line in data_list:
        key = line[0]
        value = (line[1], line[2], line[3])
        data_dict[key] = value
        data_dict = dict()

        dict_list.append(data_dict)
        # start dictionary over
        #print data_dict
      print (data_list)


      file.close()

私が持っている出力は次のとおりです。

[['EDF768', ' Bill Meyer', ' 2456', ' Vet_Parking'], 
['TY5678', ' Jane Miller', ' 8987', ' AgHort_Parking'], 
['GEF123', ' Jill Black', ' 3456', ' Creche_Parking'], 
['ABC234', ' Fred Greenside', ' 2345', ' AgHort_Parking'], 
['GH7682', ' Clara Hill', ' 7689', ' AgHort_Parking'], 
['JU9807', ' Jacky Blair', ' 7867', ' Vet_Parking'], 
['KLOI98', ' Martha Miller', ' 4563', ' Vet_Parking'], 
['ADF645', ' Cloe Freckle', ' 6789', ' Vet_Parking'], 
['DF7800', ' Jacko Frizzle', ' 4532', ' Creche_Parking'], 
['WER546', ' Olga Grey', ' 9898', ' Creche_Parking'], 
['HUY768', ' Wilbur Matty', ' 8912', ' Creche_Parking']] 

上記のリストを次のような辞書に変換するためのヒントを教えてください。

{'EDF768': ' Bill Meyer', ' 2456', ' Vet_Parking'}
4

5 に答える 5

7

csv モジュールの使用:

import csv

d = {}

with open('ParkingData_Part2.txt','r') as fh:
    for line in csv.reader(fh):
        key = line.pop(0)
        d[key] = [item.strip() for item in line]

print d

戻り値

{'TY5678': ['Jane Miller', '8987', 'AgHort_Parking'], 'GEF123': ['Jill Black', '3456', 'Creche_Parking'], 'EDF768': ['Bill Meyer', '2456', 'Vet_Parking']}
于 2012-05-11T05:07:02.313 に答える
1

手始めに、csvモジュールを使用すると、ファイルの読み取りが非常に簡単になります。

import csv

def createNameDict():
    data_file = csv.reader(open('ParkingData_Part2.txt', 'rb'))
    return dict(
        (line[0], line[1:]) for line in data_file
    )
于 2012-05-11T05:02:08.727 に答える
1

これを試して:

data_dict = {lsitem[0]:lsitem[1:] for lsitem in data_list}
于 2012-05-11T04:57:56.360 に答える
1
  for line in data_list:
    key = line[0]
    value = (line[1], line[2], line[3])
    data_dict[key] = value
    dict_list.append(data_dict)
    data_dict = dict() 

上記の最後の行では、に追加する前にdata_dict()空の dict にリセットします。2 つの線を入れ替えるだけです (上図のように)。dict_list

EDIT 出力を純粋な辞書にするために(すべてのキーが一意であると想定しています):

def createNameDict():
    with open("C:\Users\user\Desktop\\ParkingData_Part2.txt","r") as f:
        contents = file.read()
    print contents,"\n"
    data_list = [line.split(",")  for line in contents.split("\n")]
    print data_list, "\n"
    data_dict = {}
    for line in data_list:
        data_dict[line[0]] = line[1:]
    print (data_dict)
    return data_dict

目的の出力が少しあいまいであることに注意してください。指定したdict例は適切にフォーマットされておらず、SyntaxError が生成されます。私はあなたが意味すると信じています{'EDF768': ('Bill Meyer', ' 2456', ' Vet_Parking')}

于 2012-05-11T04:45:24.850 に答える
1

毎回辞書を作成する方法は少し厄介です。それを単純化するだけです:

  dict_list = []
  # data_dict = {}  get rid of this
  for line in data_list:
    data_dict = {line[0]: line[1:]}
    dict_list.append(data_dict)

辞書を宣言して毎回クリアする必要はありません。

本当に必要なものが単なる辞書である場合は、次のようにします。

  data_dict = {} 
  for line in data_list:
    data_dict[line[0]] = line[1:]
于 2012-05-11T04:53:02.453 に答える