사전 키를 인쇄하는 방법?


213

특정 Python 사전 키를 인쇄하고 싶습니다.

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

이제는 확인할 수 mydic.has_key('key_name')있지만 키 이름을 인쇄하면됩니다 'key_name'. 물론 사용할 수는 mydic.items()있지만 모든 키를 나열 하지는 않고 하나의 특정 키만 원합니다 . 예를 들어 다음과 같이 (의사 코드로) 예상됩니다.

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

어떤 거기에 name_the_key()키 이름을 인쇄하는 방법은?


편집 : 좋아, 당신의 반응에 많은 사람들에게 감사합니다! :) 나는 내 질문이 잘 짜여져 있지 않다는 것을 알고있다. 나는 key_name을 깨달았고 mydic['key_name']두 가지 다른 점 때문에 혼란 스러웠 key_name으며 사전 컨텍스트 에서 인쇄하는 것이 잘못되었다고 생각했습니다 . 그러나 실제로 'key_name'을 사용하여 키를 참조 할 수 있습니다! :)


19
원하는 특정 키가 무엇인지 알고 있다면 이미 그 키가 무엇인지 알고 있습니다.
— Wooble

답변:


382

사전에는 정의에 따라 임의의 수의 키가 있습니다. "키"가 없습니다. 당신은이 keys()당신에게 파이썬 제공 방법, list모든 키를, 당신은이 iteritems()때문에, 키 - 값 쌍을 반환하는 방법을,

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

파이썬 3 버전 :

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

따라서 키를 처리 할 수는 있지만 값에 결합하면 의미가 있습니다. 나는 당신의 질문을 이해하기를 바랍니다.


1
Python 2.7에서는 이것이 훌륭하게 작동했지만 Py3k의 대안은 무엇입니까? 나도 .iteritems()더 이상 ... 지원되지 않습니다
— piperchester

5
python 3의 대안 인 @PolyShell이 ​​Py3k의 의미라면 (지금은 파이썬에서 멀었습니다) .items(). 예를 추가했습니다.
— juanchopanza

1
@Bibhas 둘 다 작동하지만 의미는 다릅니다. items()python 2.x에서 목록을 반환합니다.
— juanchopanza

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가 "모든 키를 나열하고 싶지는 않습니다."라고 말한 이후로 이것이 옳지 않은 대답입니다.
— 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

파이썬 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())

(위와 같이) 파이썬 3에서는 iteritems가 단순히 '항목'이되었다는 점에 유의하십시오.
— Mike

주의 :로 변경 iteritems하면 items원래 표시된 것처럼이 답변은 여러 개의 일치 항목이있는 경우 첫 번째 키 만 반환합니다. 이 문제를 해결하려면 for loop( values_list = []) 앞에 빈 목록을 만든 다음 루프 에서이 목록 ( values_list.append(k))에 키를 추가하십시오 if. 마지막으로 return 문 ( return values_list)을 for루프 외부 로 이동하십시오 .
— 빅토리아 스튜어트


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

편집 : 파이썬 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한 list다음 전체 요소 인 첫 번째 요소를 dict나열한 다음 해당 요소의 첫 번째 값을 나열합니다.key_name


그래도 왜 값을 검색합니까?
— Martijn Pieters

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

파이썬 방식으로 :

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

0

이 답변을 다른 답변 중 하나 ( https://stackoverflow.com/a/5905752/1904943 )에 날짜가 표시되고 (Python 2; iteritems) 제안 된 코드에 따라 Python 3에 대해 업데이트 된 경우 코드가 표시됩니다. 해당 답변에 대한 주석의 해결 방법-모든 관련 데이터를 자동으로 반환하지 못합니다.


배경

그래프 (노드, 가장자리 등)로 표시된 대사 데이터가 있습니다. 이러한 데이터의 사전 표현에서 키 는 형식 (EC 효소 코드를 나타냄)의 값(604, 1037, 0) 과 함께 형식 (소스 및 대상 노드를 나타냄 및 엣지 유형 )입니다.5.3.1.9

주어진 값에 대한 키 찾기

다음 코드는 주어진 값에 따라 내 키를 올바르게 찾습니다.

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.