python3中的exec和defaultdict赋值

2024-03-28 20:06:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python3中构建一个为defaultdict分配键和值的函数,但在exec执行中失败了。假设我需要在defaultdict中传递几个str变量作为键和其他值:

定义dd:

dict=dd(lambda: dd(lambda: dd(lambda: dd(list))))

决定变量作为键:

keys_var = ['a', 'b', 'c', 'd']

将变量确定为值:

values_var = ['d', 'e', 'f', 'g' ]

排列键的值:

key_for_dict = []
for value in keys_var :
       value_for_keys.append( '[' + str(value) + ']' )
string_insert_keys =  ''.join(key_for_dict)

它看起来像:

[a][b][c][d]

排列插入值的值:

values_for_dict = []
for value in values_var:
     values_for_dict.append(value)
string_for_values = ', '.join(values_for_dict)
string_insert_values = "[ " + string_for_values + " ]"

它看起来像:

    [ d, e, f, g ]

现在定义一个函数,在循环中插入这些键和值(其中a,b,c,d等取不同的值,最后一个参数是所有这些d,e,f,g的连接)

我试过:

def riempie_dict_var( dizionario ) :
     exec( dizionario + string_insert_keys + ".append('___'.join( " + string_insert_columns + "))" )

但它失败了:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'collections.defaultdict' and 'str'

Tags: lambdainforstringvaluevarkeysdict
1条回答
网友
1楼 · 发布于 2024-03-28 20:06:10

如果您必须使用exec(),您应该能够:

from collections import defaultdict as dd

prova_dizionario = dd(lambda: (dd(list)))

ciao, bao = 'ciao', 'bao'

exec("prova_dizionario[ciao][bao] = ['', '', '' ]")

但是如果你提供更多的上下文,这里的人很可能会帮助你想出一个无exec的解决方案。你知道吗

编辑

我不确定我是否完全理解您的问题,但在我看来,您有一个递归数据结构,最好使用递归代码来处理:

from collections import defaultdict as dd

def recursive_insert(dictionary, keys_var, values_var):
    head, *tail = keys_var

    if tail:
        recursive_insert(dictionary[head], tail, values_var)
    else:
        dictionary[head].extend(values_var)

dictionary = dd(lambda: dd(lambda: dd(lambda: dd(list))))

keys_var = ['a', 'b', 'c', 'd']

values_var = ['d', 'e', 'f', 'g']

recursive_insert(dictionary, keys_var, values_var)

print(dictionary['a']['b']['c']['d'])

输出

% python3 test.py
['d', 'e', 'f', 'g']
%

相关问题 更多 >