0

次のように、辞書の形式で情報を返すコードを作成しました。

{'Mean Temp': '-0.1', 'Total Rain': '45', 'Month': '12', 'Year': '2003', 'Total Snow': '19.2', 'Max Temp': '-10.8', 'Min Temp': '9'}

{'Mean Temp': '-5.9', 'Total Rain': '34.3', 'Month': '1', 'Year': '1974', 'Total Snow': '35.6', 'Max Temp': '-20', 'Min Temp': '8.9'}

{'Mean Temp': '22.4', 'Total Rain': '20.8', 'Month': '8', 'Year': '2007', 'Total Snow': '0', 'Max Temp': '9.7', 'Min Temp': '34.8'}

{'Mean Temp': '21.7', 'Total Rain': '87.7', 'Month': '7', 'Year': '1993', 'Total Snow': '0', 'Max Temp': '11', 'Min Temp': '32.5'}

{'Mean Temp': '15.2', 'Total Rain': '112.5', 'Month': '6', 'Year': '1982', 'Total Snow': '0', 'Max Temp': '4', 'Min Temp': '25.4'}

これらの個別の辞書をすべてコンマで区切った単一のリストに変換する方法を知る必要があります。これまでの私のコード:

    listData = weatherData.split("\n")
    i = 0
    for listData[i] in listData :
        newList = listData[i].split(",")
        i = i + 1
        newDict = dict({'Year': newList[0], 'Month': newList[1], 'Mean Temp': 
                        newList[2], 'Min Temp':newList[3], 'Max Temp':newList[4], 
                        'Total Rain': newList[5], 'Total Snow': newList[6]})
        temp = []
        dictList = []
        i = 0
        for i in newDict :
            temp = [i]
            i = i + 1
            dictList = dictList.append(temp)
            print(dictList)
4

2 に答える 2

3

あなたはもうすぐそこにいます。外側のループの外に移動する必要があります。変数を に設定するため、 to の結果を代入dictList = [] ないでください。fordictlist.appenddictlistNone

ただし、コードを非常に複雑にしましたが、次のように簡略化できます。

dictList = []

for entry in weatherData.splitlines():
    newList = entry.split(",")
    newDict = {'Year': newList[0], 'Month': newList[1], 'Mean Temp': 
                    newList[2], 'Min Temp':newList[3], 'Max Temp':newList[4], 
                    'Total Rain': newList[5], 'Total Snow': newList[6]}
    dictList.append(newDict)

あるいは:

dictList = []
fields = ('Year', 'Month', 'Mean Temp', 'Min Temp', 'Max Temp', 'Total Rain', 'Total Snow')

for entry in weatherData.splitlines():
    newList = entry.split(",")
    newDict = dict(zip(fields, newList))
    dictList.append(newDict)

入力ファイルが CSV ファイルであると思われます。その場合は、csv代わりにモジュールを使用することをお勧めします。

import csv

fields = ('Year', 'Month', 'Mean Temp', 'Min Temp', 'Max Temp', 'Total Rain', 'Total Snow')

with open(yourweatherdatafile, 'rb') as weather:
    reader = csv.DictReader(weather, fields=fields)
    dictList = list(reader)
于 2013-04-04T18:17:15.320 に答える
1

ast.literal_evalあなたの友達です:

weatherData = """
{'Mean Temp': '-0.1', 'Total Rain': '45', 'Month': '12', 'Year': '2003', 'Total Snow': '19.2', 'Max Temp': '-10.8', 'Min Temp': '9'}

{'Mean Temp': '-5.9', 'Total Rain': '34.3', 'Month': '1', 'Year': '1974', 'Total Snow': '35.6', 'Max Temp': '-20', 'Min Temp': '8.9'}

{'Mean Temp': '22.4', 'Total Rain': '20.8', 'Month': '8', 'Year': '2007', 'Total Snow': '0', 'Max Temp': '9.7', 'Min Temp': '34.8'}

{'Mean Temp': '21.7', 'Total Rain': '87.7', 'Month': '7', 'Year': '1993', 'Total Snow': '0', 'Max Temp': '11', 'Min Temp': '32.5'}

{'Mean Temp': '15.2', 'Total Rain': '112.5', 'Month': '6', 'Year': '1982', 'Total Snow': '0', 'Max Temp': '4', 'Min Temp': '25.4'}

 """
import ast
list_data = weatherData.splitlines()
list_of_dict = [ast.literal_eval(line) for line in list_data if line.strip()]

json.loads(line)より良い場合は、代わりに使用することもできast.literal_eval(line)ます。

于 2013-04-04T18:15:23.530 に答える