2017-09-14 174 views
0

我想知道這是否可能在Python中。 我在以這種方式訪問​​列表:Python - 變量列表索引

print list[0]['name'] 

這很好。有沒有辦法使用變量? 我的意思是:

a="[0]['name']" 
print list[a] 

感謝您的建議。

一些細節:

我有一個情況我有這樣的事情:

a = [{"name":"someone", "age":23}] 
print a[0]['name'] 

但因爲我需要通過 「[0] [ '名稱']」 作爲參數,我d想知道這是否可能。 謝謝,

CIPS

+0

你需要解釋你爲什麼需要這個。否則它只能用'eval'或'exec'完成。 – JBernardo

+0

你想使用這個特定的字符串來索引你的列表,或者這個變量可以有不同的值嗎?例如'a = [0,'name']'? –

+0

請參閱下面的我的編輯。 – Ajax1234

回答

-2

一般是dangerous to use eval,但你基本上是需要你的字符串來執行你的索引轉換。

因此,首先,你可以,如果你連接之用食指操作

>>> a = "[0]['name']" 
>>> repr(l) + a 
"[{'name': 'bob'}][0]['name']" 

然後eval整個事情,它應該做的伎倆是使用strrepr

>>> l = [{'name': 'bob'}] 
>>> repr(l) 
"[{'name': 'bob'}]" 

然後讓你列表

>>> eval(repr(l) + a) 
'bob' 
+1

請不要。在這種情況下避免'eval'幾乎是_trivial_;你可以很容易地將字符串'「[0] ['name']」'解析成類似'[0,'name']''的列表,然後使用這些值來索引'a'。 –

-1

關於你最近的修改,可以不通過包含索引和密鑰字符串。但是,您可以使用eval將整個表達式轉換爲有效的Python:

a = [{"name":"someone", "age":23}] 
s = "[0]['name']" 
new_s = eval("a{}".format(s)) 
print new_s 

輸出:

someone 
+1

@CoryKramer顯然無法實現。 – Antimony

+0

@CoryKramer OP提出了一個創造性的,但最終是Python語法不兼容的解決方案。這個回答指向正確方向的OP。 – Ajax1234

+1

請不要提倡使用'eval'或'exec'。解決OP的問題_without_'eval'幾乎是微不足道的。 'eval'無故打開代碼中的一個巨大的安全漏洞。 –

-2

你可以使用函數在eval('a [0] [name]')上,它會將內部字符串評估爲python代碼。

這裏是參考: https://docs.python.org/3/library/functions.html#eval

+0

歡迎來到StackOverflow。請閱讀[答],以便將來寫出更好的答案。 – Marco

+1

請不要提倡使用'eval'或'exec'。解決OP的問題_without_'eval'幾乎是微不足道的。 'eval'無故打開代碼中的一個巨大的安全漏洞。 –

-3

可以使用exec命令

exec("print(list{})".format(a)) 

我希望工程

+1

請不要提倡使用'eval'或'exec'。解決OP的問題_without_'exec'幾乎是微不足道的。 'exec'沒有理由在你的代碼中打開一個巨大的安全漏洞。 –

1

這是從字符串"[0]['name']"提取索引/鍵的簡單的事情然後使用這些鍵來索引列表/字典結構。

data = [{"name":"someone", "age":23}] 
keys = "[0]['name']" 

# split the string into a list of indices/keys 
keys = keys[1:-1].split('][') 
# keys = ['0', "'name'"] 

# the keys are all strings, so we have to convert 
# each individual key to the correct type 
import ast 
keys = [ast.literal_eval(key) for key in keys] 
# keys = [0, 'name'] 

# now use the list of indices/keys we generated to get the value 
value = data 
for key in keys: 
    value = value[key] 

print(value) # output: someone