首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重组元组列表

重组元组列表
EN

Stack Overflow用户
提问于 2021-11-26 22:09:49
回答 1查看 47关注 0票数 1

我有一个包含包和依赖项的元组列表,如下所示:

代码语言:javascript
复制
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 )

我想得到的是一些显示依赖项和依赖程序包的内容,喜欢这样:

代码语言:javascript
复制
sorted_packages = [('six', ['absl-py', 'bleach', 'protobuf']), 
('html5lib', ['bleach']), ('args', ['clint']), ...]

我能够使用以下方法提取所有依赖项包:

代码语言:javascript
复制
# 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)

但我觉得这里太复杂了。有更简单的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-26 22:16:51

您可以使用collections.defaultdict

代码语言:javascript
复制
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()))
代码语言:javascript
复制
[('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'])]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70130469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档