[英]exec and defaultdict assignment in python3
我正在嘗試構建一個將鍵和值分配給 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'
如果您必須使用exec()
,您應該能夠:
from collections import defaultdict as dd
prova_dizionario = dd(lambda: (dd(list)))
ciao, bao = 'ciao', 'bao'
exec("prova_dizionario[ciao][bao] = ['', '', '' ]")
但是,如果您提供更多上下文,這里的人很可能能夠幫助您提出一個無需執行程序的解決方案。
編輯
我不確定我是否完全理解你的問題,但在我看來你有一個遞歸數據結構,最好用遞歸代碼處理:
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']
%
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.