python - 根据第一个元素从元组列表创建字典
问题描述
我有一个看起来像这样的元组列表:
[('name', 'Name'),('name','Age'),('name','Hometown'),('value','Bob'),('value',27),('value','Chicago'),('name','Home Team'),('name','Away Team'),('name','Score'),('value','Broncos'),('value','Patriots'),('name','Month'),('value','January'),...]
本质上这是一堆桌子。例如,第一个表将具有标题“姓名”、“年龄”和“家乡”,条目将是“鲍勃”、27 岁、“芝加哥”。
我试图把它变成这样的一本字典:{'Name':'Bob','Age':27,'Hometown':'Chicago, 'Home Team':'Broncos',...}
我相信我可以在正常情况下执行此操作,但是如果您查看第二个“表”,则有 3 个标题和只有 2 个值。在这种情况下,有没有办法将前两个“名称”映射到前两个“值”,并将第三个('Score'
)映射到空字符串?
解决方案
我认为这行得通。可能不是真的漂亮,但如果你有几个缺失值的片段,它应该是坚固的,并且不需要改变原始列表......虽然我刚刚学会了zip_longest
。谢谢@Zunayn
一点点while循环结构可以解决这个问题:
data = [('name', 'Name'),('name','Age'),('name','Hometown'),('value','Bob'),('value',27),('value','Chicago'),
('name','Home Team'),('name','Away Team'),('name','Score'),('value','Broncos'),('value','Patriots'),('name','Month'),('value','January')]
# reverse the data for more efficient pop()
data = data[::-1]
results = {}
d = data.pop()
while data:
keys = []
while d[0] == 'name':
keys.append(d[1])
d = data.pop()
values = []
while d[0] == 'value':
values.append(d[1])
if data: # need to watch for end of list
d = data.pop()
else:
break
missing = len(keys) - len(values)
values.extend(['na']*missing)
# zip intermediate results and add to result
results.update({k:v for (k, v) in zip(keys, values)})
print(results)
产量:
{'Name': 'Bob', 'Age': 27, 'Hometown': 'Chicago', 'Home Team': 'Broncos', 'Away Team': 'Patriots', 'Score': 'na', 'Month': 'January'}
推荐阅读
- java - 我们如何使用 gson.JsonObject 在非静态 java 方法/类中创建 Json
- java - 如何将很多位图合并为一个
- java - 通过命令行覆盖 Surefire 配置
- php - 更新:如何参数化具有“IN”子句的查询?
- c# - 如何从 XElement 对象中提取 XML 命名空间前缀?
- python-3.x - 如何从 2 个 Dataframe 中合并 2 行
- javascript - 输入字段专注于 safari
- javascript - 从 url 同步 base64 编码
- python - tkinter 调用 tk.canvas.create_window() 时什么是窗口
- csv - 如何记录 .csv 的计数并将该计数附加到电子邮件处理器以发送给任何人?