2012-03-03 3 views
0

Итак, у меня есть словарь, пользователи, и у него есть другой словарь, названный в честь их uid, и содержит информацию, такую ​​как письма, имена и т. Д. Скажем, я хочу найти их имя и хочу получить их uid. Любой разумный способ сделать это?Поиск по значению по словарю?

Пример словарной структуры:

users = {1: {"name": "John Doe", "email": "[email protected]"}, 
     2: {"name": "Jane Doe", "email": "[email protected]"}} 
+1

Вы можете показать точное расположение вашего dicts? –

+0

Например, вы могли бы показать несколько строк кода, которые создавали бы словарь той же структуры? Это что-то вроде {1: {«name»: «John Doe», «email»: «[email protected]»}, 2: {«name»: «Jane Doe», «email»: «janedoe @ gmail.com "}} –

+0

@DavidRobinson Этот образец правильный, извините за то, что он не является более конкретным. – user1246337

ответ

3
[uid for uid, attrs in users.items() if attrs['name'] == name_you_are_looking_for] 
+0

Исправлено, надеюсь, вы не против. –

+0

@NiklasB. 'iteritems' прекрасно, нет? –

+1

Да, но он удален в Py3, поэтому я склонен использовать 'items' на SO для повышения совместимости. То же самое относится к 'range' вместо' xrange' и т. Д. –

0

Если вы выполняете эти виды запросов много, просто используя этот формат Dict не отвечает вашим потребностям.

У вас должен быть один бит для каждого поля, в котором вы хотите выполнить поиск, или подумайте над использованием реляционного решения, такого как sqlite.

0

Это было бы более понятно:

def get_uid(users, target): 
    for key in users.keys(): 
     if users[key].get("name") == target: 
      return key 

Чтобы использовать его:

>>> print get_uid(users, "Jane Doe") 
... 2 
Смежные вопросы