我希望阅读一个列表,其中包含列名称和另一个列表列表,其中包含需要映射到列的数据。列表列表中的每个列表都是一行数据,以后可以推送到数据库中。
我尝试使用以下代码加入这两个列表:
get()
但我收到了一个错误:
dict(zip( column_names, data))
如何将列表列表和其他列表一起加入dict?
TypeError unhashable type: 'list'
我正在寻求的结果是:
column_names = ['id', 'first_name', 'last_name', 'city', 'dob']
data = [
['1', 'Mike', 'Walters', 'New York City', '1998-12-01'],
['2', 'Daniel', 'Strange', 'Baltimore', '1992-08-12'],
['3', 'Sarah', 'McNeal', 'Miami', '1990-05-05'],
['4', 'Steve', 'Breene', 'Philadelphia', '1988-02-06']
]
后来希望用SQLAlchemy将这个dicts的词汇推送到数据库。
答案 0 :(得分:6)
您可以创建一个键值对列表,如下所示:
result = [dict(zip(column_names, row)) for row in data]
请注意,括号不像您指定的那样卷曲。
答案 1 :(得分:1)
zip在你的情况下不起作用,因为它映射一对一的输入参数。
<强>演示:强>
>>> l1 = ["key01", "key02", "key03"]
>>> l2 = ["value01", "value02", "value03"]
>>> zip(l1, l2)
[('key01', 'value01'), ('key02', 'value02'), ('key03', 'value03')]
>>> dict(zip(l1, l2))
{'key01': 'value01', 'key02': 'value02', 'key03': 'value03'}
>>>
使用普通iteration and list append
方法创建最终输出:
<强>演示:强>
>>> list_data_items = []
>>> for item in data:
... list_data_items.append(dict(zip(column_names, item)))
...
答案 2 :(得分:1)
上述所有其他答案都运行良好。只是为了完整起见,您还可以使用pandas(如果您的数据来自csv文件,可能会很方便。)
只需使用您的数据创建一个数据框,然后将其转换为dict:
import pandas as pd
df = pd.DataFrame(data, columns=column_names)
df.to_dict(orient='records')
答案 3 :(得分:1)
两个简单的for循环:
column_names = ['id', 'first_name', 'last_name', 'city', 'dob']
data = [
['1', 'Mike', 'Walters', 'New York City', '1998-12-01'],
['2', 'Daniel', 'Strange', 'Baltimore', '1992-08-12'],
['3', 'Sarah', 'McNeal', 'Miami', '1990-05-05'],
['4', 'Steve', 'Breene', 'Philadelphia', '1988-02-06']
]
db_result = []
for data_row in data:
new_db_row = {}
for i, data_value in enumerate(data_row):
new_db_row[column_names[i]] = data_value
result.append(new_db_row)
print(result)
First For语句循环遍历所有数据行。 第二个使用枚举来分隔索引(i)和行的data_value。索引用于从list_names列表中提取列名。
我希望这种解释不会让它变得更复杂。 按照打印结果。
[{&#39; id&#39;:&#39; 1&#39;,&#39; first_name&#39;:&#39; Mike&#39;,&#39; last_name&#39;: &#39; Walters&#39; city&#39 ;:&#39;纽约市&#39;&#39; dob&#39;:&#39; 1998-12-01&#39; },{&#39; id&#39;:&#39; 2&#39;,&#39; first_name&#39;:&#39; Daniel&#39;,&#39; last_name&#39;:&# 39;奇怪的&#39;,&#39;城市&#39;:&#39;巴尔的摩&#39;&#39; dob&#39;:&#39; 1992-08-12&#39;},{& #39; id&#39;:&#39; 3&#39;,&#39; first_name&#39;:&#39; Sarah&#39;,&#39; last_name&#39;:&#39; McNeal&# 39;,&#39; city&#39;:&#39; Miami&#39;,&#39; dob&#39;:&#39; 1990-05-05&#39;},{&#39; id& #39;:&#39; 4&#39;,&#39; first_name&#39;:&#39; Steve&#39;,&#39; last_name&#39;:&#39; Breene&#39;,& #39; city&#39;:&#39;费城&#39;,&#39; dob&#39;:&#39; 1988-02-06&#39;}]
答案 4 :(得分:0)
由于您要构建多个词典,因此必须使用zip
中的每个列表data
列名称,并将结果传递给dict
构造函数。您的结果dict_items
也需要是一个可以存储不可用类型(如词典)的集合。我们不能使用set
(你说你正在寻找),但我们可以使用列表(或元组)。
使用简单的列表理解,为data
中的每个子列表构建一个字典。
>>> [dict(zip(column_names, sublist)) for sublist in data]
[{'dob': '1998-12-01', 'city': 'New York City', 'first_name': 'Mike', 'last_name': 'Walters', 'id': '1'}, {'dob': '1992-08-12', 'city': 'Baltimore', 'first_name': 'Daniel', 'last_name': 'Strange', 'id': '2'}, {'dob': '1990-05-05', 'city': 'Miami', 'first_name': 'Sarah', 'last_name': 'McNeal', 'id': '3'}, {'dob': '1988-02-06', 'city': 'Philadelphia', 'first_name': 'Steve', 'last_name': 'Breene', 'id': '4'}]
我还假设您的预期结果中的{'id':'2'}
是拼写错误。
答案 5 :(得分:0)
使用Pandas
:
>>> column_names
['id', 'first_name', 'last_name', 'city', 'dob']
>>> data
[['1', 'Mike', 'Walters', 'New York City', '1998-12-01'], ['2', 'Daniel', 'Strange', 'Baltimore', '1992-08-12'], ['3', 'Sarah', 'McNeal', 'Miami', '1990-05-05'], ['4', 'Steve', 'Breene', 'Philadelphia', '1988-02-06']]
>>> import pandas as pd
>>> pd.DataFrame(data, columns=column_names).T.to_dict().values()
[{'dob': '1998-12-01', 'city': 'New York City', 'first_name': 'Mike', 'last_name': 'Walters', 'id': '1'}, {'dob': '1992-08-12', 'city': 'Baltimore', 'first_name': 'Daniel', 'last_name': 'Strange', 'id': '2'}, {'dob': '1990-05-05', 'city': 'Miami', 'first_name': 'Sarah', 'last_name': 'McNeal', 'id': '3'}, {'dob': '1988-02-06', 'city': 'Philadelphia', 'first_name': 'Steve', 'last_name': 'Breene', 'id': '4'}]
答案 6 :(得分:0)
column_names = ['id', 'first_name', 'last_name', 'city', 'dob']
data = [
['1', 'Mike', 'Walters', 'New York City', '1998-12-01'],
['2', 'Daniel', 'Strange', 'Baltimore', '1992-08-12'],
['3', 'Sarah', 'McNeal', 'Miami', '1990-05-05'],
['4', 'Steve', 'Breene', 'Philadelphia', '1988-02-06']
]
destinationList = []
for value in data:
destinationList.append(dict(zip(column_names,value)))
print(destinationList)
#
# zip(column_names,value)
# [('id', '1'), ('first_name', 'Mike') , ('last_name', 'Walters'), ('city', 'New York City'),('dob', '1998-12-01')]]
# dict(zip(column_names,value))
# {'last_name': 'Walters', 'dob': '1998-12-01','id': '1','first_name': 'Mike','city': 'New York City'}