我有一個包含包和依賴項的元組串列,如下所示:
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關于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)
但我覺得這里太復雜了。有沒有辦法以更簡單的方式做到這一點?
uj5u.com熱心網友回復:
您可以使用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://www.uj5u.com/gongcheng/367731.html
