사전 키를 인쇄하는 방법?


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

를로 변환 dictionarylist다음 전체 요소 인 첫 번째 요소를 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.