解构长度为 1 的“dict”,将其键和值分配给 Python 中的两个变量

Ξέν*_*νος 1 python python-3.x

我有一堆dict只有一个键值对的离子,有时是由我编写的一个脚本生成的,我需要摆脱它们。

为此,我需要获取dict. 说明我的意图的最小可重复示例:

d = {'a': 0}
assert len(d) == 1
k, v = list(d.items())[0]
Run Code Online (Sandbox Code Playgroud)

不知道这是否重复,但我无法使用谷歌找到答案。

有没有更简单的方法来k, v获取d


编辑

如果有人想知道,情况是这样的:

from pathlib import Path

def recur_dir(path, root=''):
    first = False
    if not root:
        assert Path(path).is_dir()
        root = path
        first = True
    report = {'folders': dict(), 'files': []}
    for element in Path(path).iterdir():
        if element.is_file():
            report['files'].append(element.name)
        elif element.is_dir():
           report['folders'].update(recur_dir(str(element).replace('\\', '/'), root))
    
    folders = report['folders']
    for name, folder in list(folders.items()):
        if not folder:
            folders.pop(name)
        if not folder.get('files', None):
            folders[name].pop('files', None)
            if len(folder['folders']) == 1:
                key, value = folder['folders'].popitem()
                folders[key] = value
                folders.pop(name)
        elif not folder['folders']:
            folders[name].pop('folders')
    
    if not report.get('files', None):
        report.pop('files', None)
    
    if first:
        return {path: report}
    else:
        return {path.replace(root, ''): report}
Run Code Online (Sandbox Code Playgroud)

简而言之,我编写了一个脚本,它递归地列出任何给定目录的内容,并且某些子目录是空的,其他子目录可能包含一个子目录而没有其他内容。

我想删除空子目录并将仅包含一个子目录的子目录名称连接起来以删除不必要的嵌套级别。

这个问题与第二部分有关,我还没有找到一种方法,首先不创建不必要的嵌套级别......

Kel*_*ndy 6

如果您不再需要该字典(正如您的“摆脱它们”所建议的那样):

\n
k, v = d.popitem()\n
Run Code Online (Sandbox Code Playgroud)\n

如果你这样做:

\n
(k, v), = d.items()\n
Run Code Online (Sandbox Code Playgroud)\n

在线尝试一下!

\n

  • @Cardstdani 列表推导式用于创建列表。他们不想创建列表。(至少据我所知。也许他们的实际用例有“一堆”字典需要一个列表,但他们没有展示这一点。) (2认同)