239

Sorry for this basic question but my searches on this are not turning up anything other than how to get a dictionary's key based on its value which I would prefer not to use as I simply want the text/name of the key and am worried that searching by value may end up returning 2 or more keys if the dictionary has a lot of entries... what I am trying to do is this:

mydictionary={'keyname':'somevalue'}
for current in mydictionary:

   result = mydictionary.(some_function_to_get_key_name)[current]
   print result
   "keyname"

The reason for this is that I am printing these out to a document and I want to use the key name and the value in doing this

I have seen the method below but this seems to just return the key's value

get(key[, default])
Martin Thoma
  • 124,992
  • 159
  • 614
  • 958
Rick
  • 16,612
  • 34
  • 110
  • 163

15 Answers15

269

You should iterate over keys with:

for key in mydictionary:
   print "key: %s , value: %s" % (key, mydictionary[key])
systempuntoout
  • 71,966
  • 47
  • 171
  • 241
122

If you want to access both the key and value, use the following:

Python 2:

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

Python 3:

for key, value in my_dict.items():
    print(key, value)
Pikamander2
  • 7,332
  • 3
  • 48
  • 69
Escualo
  • 40,844
  • 23
  • 87
  • 135
87

The reason for this is that I am printing these out to a document and I want to use the key name and the value in doing this

Based on the above requirement this is what I would suggest:

keys = mydictionary.keys()
keys.sort()

for each in keys:
    print "%s: %s" % (each, mydictionary.get(each))
Manoj Govindan
  • 72,339
  • 21
  • 134
  • 141
  • I prefer the other answers like the for loop on `my_dict.item()` or list comprehension like `keys = list(my_dict.keys)` but just in case someone wants to do this in Python 3 : (line 2) `keys = sorted(my_dict.keys())` + add () to print. – Honiix Dec 12 '16 at 09:03
79

If the dictionary contains one pair like this:

d = {'age':24}

then you can get as

field, value = d.items()[0]

For Python 3.5, do this:

key = list(d.keys())[0]
Simon
  • 19,658
  • 27
  • 149
  • 217
Sudhin
  • 799
  • 5
  • 2
14

keys=[i for i in mydictionary.keys()] or keys = list(mydictionary.keys())

Ondrej Janacek
  • 12,486
  • 14
  • 59
  • 93
kurian
  • 171
  • 2
  • 10
11

As simple as that:

mydictionary={'keyname':'somevalue'}
result = mydictionary.popitem()[0]

You will modify your dictionary and should make a copy of it first

cssyphus
  • 37,875
  • 18
  • 96
  • 111
Libert
  • 172
  • 2
  • 12
11

You could simply use * which unpacks the dictionary keys. Example:

d = {'x': 1, 'y': 2}
t = (*d,)
print(t) # ('x', 'y')
Georg
  • 1,078
  • 2
  • 9
  • 18
5

Iterate over dictionary (i) will return the key, then using it (i) to get the value

for i in D:
    print "key: %s, value: %s" % (i, D[i])
splucena
  • 383
  • 3
  • 8
  • 17
4

For python 3 If you want to get only the keys use this. Replace print(key) with print(values) if you want the values.

for key,value in my_dict:
  print(key)
siddharth
  • 190
  • 3
  • 10
3

What I sometimes do is I create another dictionary just to be able whatever I feel I need to access as string. Then I iterate over multiple dictionaries matching keys to build e.g. a table with first column as description.

dict_names = {'key1': 'Text 1', 'key2': 'Text 2'}
dict_values = {'key1': 0, 'key2': 1} 

for key, value in dict_names.items():
    print('{0} {1}'.format(dict_names[key], dict_values[key])

You can easily do for a huge amount of dictionaries to match data (I like the fact that with dictionary you can always refer to something well known as the key name)

yes I use dictionaries to store results of functions so I don't need to run these functions everytime I call them just only once and then access the results anytime.

EDIT: in my example the key name does not really matter (I personally like using the same key names as it is easier to go pick a single value from any of my matching dictionaries), just make sure the number of keys in each dictionary is the same

s3icc0
  • 41
  • 1
  • 7
2

You can do this by casting the dict keys and values to list. It can also be be done for items.

Example:

f = {'one': 'police', 'two': 'oranges', 'three': 'car'}
list(f.keys())[0] = 'one'
list(f.keys())[1] = 'two'

list(f.values())[0] = 'police'
list(f.values())[1] = 'oranges'
lallolu
  • 139
  • 2
  • 4
2

if you just need to get a key-value from a simple dictionary like e.g:

os_type = {'ubuntu': '20.04'}

use popitem() method:

os, version = os_type.popitem()
print(os) # 'ubuntu'
print(version) # '20.04'
Savrige
  • 3,352
  • 3
  • 32
  • 38
0
names=[key for key, value in mydictionary.items()]
0

if you have a dict like

d = {'age':24}

then you can get key and value by d.popitem()

key, value = d.popitem()
nima
  • 43
  • 4
-2

easily change the position of your keys and values,then use values to get key, in dictionary keys can have same value but they(keys) should be different. for instance if you have a list and the first value of it is a key for your problem and other values are the specs of the first value:

list1=["Name",'ID=13736','Phone:1313','Dep:pyhton']

you can save and use the data easily in Dictionary by this loop:

data_dict={}
for i in range(1, len(list1)):
     data_dict[list1[i]]=list1[0]
print(data_dict)
{'ID=13736': 'Name', 'Phone:1313': 'Name', 'Dep:pyhton': 'Name'}

then you can find the key(name) base on any input value.