我的目標是將串列轉換為字典,鍵是串列的變數名和附加到每個鍵的串列的索引值。它需要以函式的形式普遍可行(因為我有許多串列需要轉換為鍵值對)。例如,假設我有這兩個串列:
action = [1, 3, 5, 7, 9]
result = [2, 6, 10, 14, 18]
我有一個功能:
def list_to_dict(lst):
...
return dict
輸出應該是這樣的:
action_dict = list_to_dict(action)
result_dict = list_to_dict(result)
print(action_dict)
print(result_dict)
>>> {'action_0': 1, 'action_1': 3, 'action_2': 5, 'action_3': 7, 'action_4': 9}
>>> {'result_0': 2, 'result_1': 6, 'result_2': 10, 'result_3': 14, 'result_4': 18}
到目前為止,我能為該函式做的只是列舉一個串列,并讓索引成為各個值的鍵。
def list_to_dict(lst):
dict = {k:v for k, v in enumerate(lst)}
return dict
>>> {0: 1, 1: 3, 2: 5, 3: 7, 4: 9}
但是,我無法找到將變數名作為字串放在鍵中的方法。我試過var.__name__了,但我認為這僅限于功能。
uj5u.com熱心網友回復:
使用來自將變數的名稱作為字串獲取的retrieve_namejuan Isaza
import inspect
action = [1, 3, 5, 7, 9]
result = [2, 6, 10, 14, 18]
def retrieve_name(var):
"""
Gets the name of var. Does it from the out most frame inner-wards.
:param var: variable to get name from.
:return: string
"""
for fi in reversed(inspect.stack()):
names = [var_name for var_name, var_val in fi.frame.f_locals.items() if var_val is var]
if len(names) > 0:
return names[0]
def list_to_dict(lst):
name = retrieve_name(lst)
return {f"{name}_{k}":v for k, v in enumerate(lst)}
action_dict = list_to_dict(action)
result_dict = list_to_dict(result)
print(action_dict)
print(result_dict)
輸出:
{'action_0': 1, 'action_1': 3, 'action_2': 5, 'action_3': 7, 'action_4': 9}
{'result_0': 2, 'result_1': 6, 'result_2': 10, 'result_3': 14, 'result_4': 18}
uj5u.com熱心網友回復:
您可以使用 zip 如下
dic = {k:v for k,v in zip(action,result)}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/441370.html
下一篇:從python中的字典創建資料框
