我有一个包含包和依赖项的元组列表,如下所示:
list_packages_dep = [(['six'], 'absl-py'), (['html5lib', 'six'], 'bleach'), (['args'], 'clint'),
(['discord.py'], 'discord'), (['aiohttp'], 'discord.py'),
(['click', 'itsdangerous', 'Jinja2', 'Werkzeug'], 'Flask'),
(['importlib-metadata'], 'jsonpickle'), (['importlib-metadata'], 'Markdown'),
(['six'], 'protobuf'), (['comtypes', 'pypiwin32', 'pywin32'], 'pyttsx3'),
(['certifi', 'chardet', 'idna', 'urllib3'], 'requests')]元组的第一个索引是在元组的第二个索引中命名的包的依赖项。
(例如absl-py depends on six )
我想得到的是一些显示依赖项和依赖程序包的内容,喜欢这样:
sorted_packages = [('six', ['absl-py', 'bleach', 'protobuf']),
('html5lib', ['bleach']), ('args', ['clint']), ...]我能够使用以下方法提取所有依赖项包:
# get packages
list_packages = [a for (x, a) in list_packages_dep]
# get dependencies and remove duplicates
list_dependencies = []
for pack in list_packages_dep :
pack_list = pack[0]
if list_dependencies == []:
list_dependencies = [x.lower() for x in pack_list]
else:
for po in pack_list:
if po.lower() in list_dependencies:
pass
else:
list_dependencies.append(po.lower())
print(list_dependencies)但我觉得这里太复杂了。有更简单的方法吗?
发布于 2021-11-26 22:16:51
您可以使用collections.defaultdict
from collections import defaultdict
list_packages_dep = [(['six'], 'absl-py'), (['html5lib', 'six'], 'bleach'), (['args'], 'clint'),
(['discord.py'], 'discord'), (['aiohttp'], 'discord.py'),
(['click', 'itsdangerous', 'Jinja2', 'Werkzeug'], 'Flask'),
(['importlib-metadata'], 'jsonpickle'), (['importlib-metadata'], 'Markdown'),
(['six'], 'protobuf'), (['comtypes', 'pypiwin32', 'pywin32'], 'pyttsx3'),
(['certifi', 'chardet', 'idna', 'urllib3'], 'requests')]
d = defaultdict(list)
for lst_dep, pkg in list_packages_dep:
for dep in lst_dep:
d[dep].append(pkg)
print(list(d.items()))[('six', ['absl-py', 'bleach', 'protobuf']),
('html5lib', ['bleach']),
('args', ['clint']),
('discord.py', ['discord']),
('aiohttp', ['discord.py']),
('click', ['Flask']),
('itsdangerous', ['Flask']),
('Jinja2', ['Flask']),
('Werkzeug', ['Flask']),
('importlib-metadata', ['jsonpickle', 'Markdown']),
('comtypes', ['pyttsx3']),
('pypiwin32', ['pyttsx3']),
('pywin32', ['pyttsx3']),
('certifi', ['requests']),
('chardet', ['requests']),
('idna', ['requests']),
('urllib3', ['requests'])]https://stackoverflow.com/questions/70130469
复制相似问题