web-dev-qa-db-ja.com

辞書のキーを印刷するにはどうすればいいですか?

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

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

mydic.has_key('key_name')かどうか確認できますが、やりたいことはキー'key_name'の名前を表示することです。もちろんmydic.items()を使うこともできますが、 all /にリストされているキーを使いたくはありません。例えば、私は(擬似コードで)このようなことを期待しています:

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'を使用することができます。 :)

170
Benjamin

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

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

Python 3バージョン:

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

それであなたはキーについてのハンドルを持っています、しかしそれらは値に結合されているなら本当に意味を意味するだけです。私はあなたの質問を理解したことを願っています。

307
juanchopanza

さらにあなたが使用することができます....

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

うーん、私はあなたがしたいと思うかもしれないことはprint all 辞書のキーとそれぞれの値でしょうか?

もしそうなら、あなたは以下が欲しい:

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

必ず、の代わりに+を使用してください。コンマは、それらの各項目を別々の行に配置します。プラスと同じ行に配置します。

30
Dominic Santos
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では、dict.iteritems()はdic.items()に変更されました

29
ademar111190

キー 'key_name'の名前はkey_nameなので、print 'key_name'またはそれを表す変数はなんでも構いません。

25
zenna

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

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

多くのキーが同じ値を持つ可能性があるので、この関数は some keyを返します。

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

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

あるいは、そのようにすることもできます。

for key in my_dict:
     print key, my_dict[key]
4
Eugene Soldatov

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))))
3
FouadDev
import pprint
pprint.pprint(mydic.keys())
2
Matt Joiner
# highlighting how to use a named variable within a string:
dict = {'a': 1, 'b': 2}

# simple method:
print "a %(a)s" % dict
print "b %(b)s" % dict

# programmatic method:
for key in dict:
    val = '%('+key+')s'
    print key, val % dict

# yields:
# a 1
# b 2

# using list comprehension
print "\n".join(["%s: %s" % (key, ('%('+key+')s') % dict) for key in dict])

# yields:
# a: 1
# b: 2
2
Brian Bruggeman

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

2
Ry-
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
Rob Wilson

単一の値のキーを取得したい場合は、以下が役立ちます。

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)
1
Jeril

することを忘れないでください

dictionary.keys()
# rather than
dictionary.keys
1
Crt

キー名のみを取得する最も簡単な方法は、次のとおりです。

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

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

結果:

key_name

dictionarylistに変換し、それが全体のdictである最初の要素をリストし、それからそれがその要素の最初の値をリストします:key_name

1
Fekete Sumér

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

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
PeaWagon

これを試して:

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
fdb

ここに他の回答の1つとしてこの回答を追加しています( https://stackoverflow.com/a/5905752/190494 )は日付が付けられています(Python 2; iteritems)、そして提示されたコード-Python 3に更新された場合、その回答へのコメントで提案された回避策ごとに更新された場合、すべての関連データを静かに返すことができません。


背景

グラフで表される代謝データがいくつかあります(ノード、エッジなど)。これらのデータのディクショナリ表現では、keys(604, 1037, 0)(ソースノードとターゲットノード、およびEdgeタイプを表す)の形式です。 valuesの形式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)

iteritemsitemsに置き換えて単純に更新された後者のコードは、(604, 3936, 0), (1037, 3936, 0を返しません。

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