2017-09-14 10 views
0

これはPythonで可能かどうかと思います。 私は、このようにリストにアクセスしています:Python - リストインデックスとしての変数

print list[0]['name'] 

これで結構です。変数を使用する方法はありますか? 意味:

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

ご意見ありがとうございます。

いくつかの詳細:私は状況がある

私はこのようなものがあります:

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

をしかし、私は "[0] [ '名前']" パラメータとして、私は」渡す必要があるためこれが可能かどうかを理解したい。 おかげで、最新の編集に関しては

CIPS

+0

なぜこれが必要なのか説明する必要があります。それ以外の場合は、 'eval'や' exec'だけで実現できます – JBernardo

+0

この特定の文字列をあなたのリストのインデックスに使用したいのですか、変数の値が違うのでしょうか?たとえば、 'a = [0、 'name']'? –

+0

下記の私の編集をご覧ください。 – Ajax1234

答えて

-2

をそれがdangerous to use evalですが、基本的にあなたのインデックス作成を実行するために、あなたの文字列を変換する必要があります。

あなたが全部evalその後、

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

あなたのインデックス操作で、それはトリックを行う必要があることを連結するのであれば最初にあなたがしてrepr

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

を使用してstrとしてあなたのリストを取得することができます

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

してください。この場合、 'eval'を避けることはほとんど不可能です。文字列 '' [0] ['name'] ''を '[0、 'name']'のようなリストに簡単に解析し、それらの値を 'a'のインデックスに使うことができます。 –

-1

は、あなたは、インデックスとキーを含む文字列を渡すことはできません。ただし、有効なPythonの式全体を変換するためにevalを使用することができます。

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の問題を「eval」なしで解決するのは簡単ではありません。 'eval'は何の理由もなくあなたのコードに大規模なセキュリティホールを開きます。 –

-2

functi eval( 'a [0] [name]')では、内部の文字列をPythonコードとして評価します。ここ

が参照です: https://docs.python.org/3/library/functions.html#eval

+0

ようこそStackOverflowへ。将来はより良い回答を書くために[答]をお読みください。 – Marco

+1

'eval'や' exec'の使用を主張してはいけません。 OPの問題を「eval」なしで解決するのは簡単ではありません。 'eval'は何の理由もなくあなたのコードに大規模なセキュリティホールを開きます。 –

-3

あなたは

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

EXECコマンドを使用することができ、私はこれは、文字列からインデックス/キーを抽出するだけの簡単な作業であることが

+1

'eval'や' exec'の使用を主張してはいけません。 OPの問題を解決することはほとんど不可能です。 'exec'はあなたのコードに大きなセキュリティホールを開きます。 –

1

の作品を願ってい"[0]['name']"それらのキーを使用してlist/dict構造体のインデックスを作成します。

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 
関連する問題