python - 如何从列表和列表列表中制作字典
问题描述
我有两个清单。一个只包含单个值,另一个包含列表。第一个列表的值几乎总是(但不总是)与列表列表的每个列表的 0 位置的值相同。
List1 = [ "abcd", "efg", "hijk"]
List2 = [ ["abcd", "hello", "world"],
["efg", "My name's", "Tom"],
["hijk", "I", "Love you"]
我想用 list1 中的键和 list2 中的值制作一个字典:
Dict = {"abcd": ["hello", "world"],
"efg": ["My name's", "Tom"],
"hijk": ["I", "Love you"]}
我尝试这样做,但没有任何令人满意的结果:
List1= [ "abcd", "efg", "hijk"]
List2= [ ["abcd", "hello", "world"],
["efg", "My name's", "Tom"],
["hijk", "I", "Love you"]
dict = {}
i = 0
for element in List2:
if element[0] == List1[i]:
zip_iterator = zip(List1[i], element[1:])
dict.update(zip_iterator)
else:
print("error")
print(element[0], List1[i])
i += 1
print(dict)
它没有给出 Traceback,而是一个奇怪的输出。请问你能帮帮我吗?
解决方案
好像你根本不需要List1
;只需从以下内容进行字典理解List2
:
>>> List2= [["abcd","hello", "world"], ["efg", "My name's", "Tom"], ["hijk", "I","Love you"]]
>>> {k: v for k, *v in List2}
{'abcd': ['hello', 'world'], 'efg': ["My name's", 'Tom'], 'hijk': ['I', 'Love you']}
这里,for k, *v in ...
是可迭代解包的高级形式,将每个子列表的第一个元素存储在 中k
,其余元素存储在v
.
如果不是那么简单,并且 from 的键List1
可能出现在的相应元素的任何位置,请尝试这个嵌套的字典和列表理解(注意:我打乱了 的子列表以使其更有趣):List2
List2
>>> List1= ["abcd", "efg", "hijk"]
>>> List2= [["abcd","hello", "world"], ["My name's", "efg", "Tom"], ["I","Love you", "hijk"]]
>>> {k: [x for x in v if x != k] for k, v in zip(List1, List2)}
{'abcd': ['hello', 'world'], 'efg': ["My name's", 'Tom'], 'hijk': ['I', 'Love you']}
推荐阅读
- r - 使用 glmnet 拟合带有偏移的逻辑回归模型时,R 挂起
- android - 我无法构建也许这是一个 Kotlin 错误
- url - 如何@match用户脚本中的URL哈希?
- python - 如何按句点对 pandas DataFrame 进行分组?
- reporting-services - 确定一个表中的日期是否介于另一个表中的日期之间
- json - 停止 json.Marshal() 从浮点数中去除尾随零
- perforce - Perforce 变更列表和搁置命令
- c# - 使用 EPPlus 从 Excel 中读取超过 24 小时的持续时间
- python - Python BeautifulSoup findAll 不返回所有元素?
- java - java.io.FileNotFoundException:(权限被拒绝)仅在奥利奥