辞書のキーを印刷する方法は?


213

特定のPython辞書キーを印刷したいと思います。

mydic = {}
mydic['key_name'] = 'value_name'

これで確認できmydic.has_key('key_name')ますが、キーの名前を出力するのが目的です'key_name'。もちろんを使用することもできますがmydic.items()、リストされているすべてのキーではなく、1つの特定のキーだけが必要です。たとえば、私はこのようなものを(擬似コードで)期待します:

print "the key name is", mydic['key_name'].name_the_key(), "and its value is", mydic['key_name']

name_the_key()キー名を出力する方法はありますか?


編集: OK、あなたの反応をたくさんの人に感謝します!:)私の質問はよく定式化されておらず、些細なことではありません。key_nameとmydic['key_name']2つの異なることに気付いて混乱しましたkey_name。辞書のコンテキストから出力するのは正しくないと思いました。しかし、確かに私は「key_name」を使用してキーを参照するだけです!:)


19
あなたが望む特定のキーが何であるか知っているなら、ええと、あなたはすでにキーが何であるかを知っています。
Wooble

回答:


381

辞書には、定義により、任意の数のキーがあります。「鍵」はありません。あなたは持っているkeys()あなたのpython与え方法、listすべてのキーのを、あなたは持っているiteritems()ので、キーと値のペアを返すメソッドを、

for key, value in mydic.iteritems() :
    print key, value

Python 3バージョン:

for key, value in mydic.items() :
    print (key, value)

したがって、キーのハンドルがありますが、値と組み合わせた場合にのみ意味を持ちます。私はあなたの質問を理解したことを望みます。


1
これはPython 2.7では美しく機能しましたが、Py3kの代替手段は何ですか?私.iteritems()はもうサポートされていないことを知っています...
piperchester 2013年

5
@PolyShellは、Python 3の代替手段です。それがPy3kであなたが意味するものである場合(私はしばらくの間Pythonから離れています)、それ.items()です。例を追加しました。
juanchopanza 2013年

1
@Bibhasどちらも機能しますが、セマンティクスは異なります。items()python 2.xでリストを返します。
juanchopanza 2014

72

さらに、使用できます...

print(dictionary.items()) #prints keys and values
print(dictionary.keys()) #prints keys
print(dictionary.values()) #prints values

ありがとう!これはまさに私が探していたものです:)
Masoud Maleki

34

うーん、あなたがやりたいことは辞書のすべてのキーとそれぞれの値を印刷することだと思いますか?

もしそうなら、あなたは以下を望みます:

for key in mydic:
  print "the key name is" + key + "and its value is" + mydic[key]

同様に、+を使用してください。コンマはそれらの項目のそれぞれを私が思う別の行に配置しますが、プラスは同じ行に配置します。


2
コンマは、同じ行にそれらを残すが、間にスペースを挿入します"is"key、あなたが使用している場合など+、あなたが文字列に余分なパディングを配置する必要があります。また、キーと値は必ずしも文字列である必要はありません。その場合、コンマはstr(key)とstr(value)を使用します+が、エラーを引き起こします
John La Rooy

1
OPが「すべてのキーを一覧表示したくない」と言ったため、これが正しくないとわかっている答えの1つです。
Ned Batchelder、

どういうわけか、私はコンマを別の方法で考えました。あなたはそれで正しいです。私も質問を読み直しました。どちらも「すべて」を太字にしたようです-私の悪い。
Dominic Santos、

32
dic = {"key 1":"value 1","key b":"value b"}

#print the keys:
for key in dic:
    print key

#print the values:
for value in dic.itervalues():
    print value

#print key and values
for key, value in dic.iteritems():
    print key, value

注:Python 3では、dic.iteritems()はdic.items()に名前が変更されました


25

キー 'key_name'の名前はkey_nameであるため、それprint 'key_name'を表す任意の変数です。


10

Python 3の場合:

# A simple dictionary
x = {'X':"yes", 'Y':"no", 'Z':"ok"}

# To print a specific key (for example key at index 1)
print([key for key in x.keys()][1])

# To print a specific value (for example value at index 1)
print([value for value in x.values()][1])

# To print a pair of a key with its value (for example pair at index 2)
print(([key for key in x.keys()][2], [value for value in x.values()][2]))

# To print a key and a different value (for example key at index 0 and value at index 1)
print(([key for key in x.keys()][0], [value for value in x.values()][1]))

# To print all keys and values concatenated together
print(''.join(str(key) + '' + str(value) for key, value in x.items()))

# To print all keys and values separated by commas
print(', '.join(str(key) + ', ' + str(value) for key, value in x.items()))

# To print all pairs of (key, value) one at a time
for e in range(len(x)):
    print(([key for key in x.keys()][e], [value for value in x.values()][e]))

# To print all pairs (key, value) in a tuple
print(tuple(([key for key in x.keys()][i], [value for value in x.values()][i]) for i in range(len(x))))

8

「キー名を印刷する」の意味を推測しようとしているので、少し試してみましょう。おそらく、辞書から値を取得して対応するキーを見つける関数が必要ですか?逆引き?

def key_for_value(d, value):
    """Return a key in `d` having a value of `value`."""
    for k, v in d.iteritems():
        if v == value:
            return k

多くのキーが同じ値を持つ可能性があるので、この関数は、おそらく意図したものではなく、値を持ついくつかのキーを返します。

これを頻繁に行う必要がある場合は、逆引き辞書を作成することは理にかなっています。

d_rev = dict(v,k for k,v in d.iteritems())

iteritemsは、単にPythonの3の「アイテム」になったこと(上記のように)注意
マイク・

注意:に変更iteritemsするとitems、最初に表示されたように、この回答は最初のキーのみを返します-複数の一致がある場合。これを解決するには、ループでfor loopvalues_list = [])の前に空のリストを作成し、このリストにキーを追加します(values_list.append(k)if。最後に、returnステートメント(return values_list)をforループの外に移動します。
Victoria Stuart


4
# highlighting how to use a named variable within a string:
mapping = {'a': 1, 'b': 2}

# simple method:
print(f'a: {mapping["a"]}')
print(f'b: {mapping["b"]}')

# programmatic method:
for key, value in mapping.items():
    print(f'{key}: {value}')

# yields:
# a 1
# b 2

# using list comprehension
print('\n'.join(f'{key}: {value}' for key, value in dict.items()))


# yields:
# a: 1
# b: 2

編集:python 3のf文字列用に更新...


3

必ず行う

dictionary.keys()
# rather than
dictionary.keys

2

'key_name'変数であっても、代わりに使用することの何が問題になっていますか?



1
dict = {'name' : 'Fred', 'age' : 100, 'employed' : True }

# Choose key to print (could be a user input)
x = 'name'

if x in dict.keys():
    print(x)

1

おそらくキー名のみを取得する最も速い方法:

mydic = {}
mydic['key_name'] = 'value_name'

print mydic.items()[0][0]

結果:

key_name

dictionaryをaに変換してからlist、全体である最初の要素をリストし、次にdictその要素の最初の値をリストします。key_name


なぜ値も取得するのですか?
Martijn Pieters

1

辞書にエントリが1つしかない場合に「キー」の名前を取得する方法を知りたいので、この質問を調べました。私の場合、鍵は私には知られていないため、いくつでもかまいません。これが私が思いついたものです:

dict1 = {'random_word': [1,2,3]}
key_name = str([key for key in dict1]).strip("'[]'")        
print(key_name)  # equal to 'random_word', type: string.

0

これを試して:

def name_the_key(dict, key):
    return key, dict[key]

mydict = {'key1':1, 'key2':2, 'key3':3}

key_name, value = name_the_key(mydict, 'key2')
print 'KEY NAME: %s' % key_name
print 'KEY VALUE: %s' % value

0
key_name = '...'
print "the key name is %s and its value is %s"%(key_name, mydic[key_name])

0

単一の値のキーを取得する場合は、次の方法が役立ちます。

def get_key(b): # the value is passed to the function
    for k, v in mydic.items():
        if v.lower() == b.lower():
            return k

Pythonicの方法で:

c = next((x for x, y in mydic.items() if y.lower() == b.lower()), \
     "Enter a valid 'Value'")
print(c)

0

私はこの回答を他の回答の1つとして追加しています(https://stackoverflow.com/a/5905752/1904943)は日付が付けられ(Python 2; iteritems)、コードが表示されます-提案に従ってPython 3に更新した場合その答えへのコメントの回避策-関連するすべてのデータを返さずに失敗します。


バックグラウンド

グラフで表されたいくつかの代謝データ(ノード、エッジなど)があります。これらのデータのディクショナリ表現では、キー(604, 1037, 0)(ソースノードとターゲットノード、およびエッジタイプを表す)という形式で、5.3.1.9(EC酵素コードを表す)です。

与えられた値のキーを見つける

次のコードは、指定された値でキーを正しく検出します。

def k4v_edited(my_dict, value):
    values_list = []
    for k, v in my_dict.items():
        if v == value:
            values_list.append(k)
    return values_list

print(k4v_edited(edge_attributes, '5.3.1.9'))
## [(604, 1037, 0), (604, 3936, 0), (1037, 3936, 0)]

一方、このコードは最初の(場合によっては複数の一致する)キーのみを返します。

def k4v(my_dict, value):
    for k, v in my_dict.items():
        if v == value:
            return k

print(k4v(edge_attributes, '5.3.1.9'))
## (604, 1037, 0)

単純に置き換える更新後者のコード、iteritemsとはitems、返すことができません(604, 3936, 0), (1037, 3936, 0


0

データにアクセスするには、これを行う必要があります。

foo = {
    "foo0": "bar0",
    "foo1": "bar1",
    "foo2": "bar2",
    "foo3": "bar3"
}
for bar in foo:
  print(bar)

または、値にアクセスするには、キーから呼び出すだけです。 foo[bar]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.