2012-03-03 131 views
0

所以說我有一本字典,用戶,它有另一個詞典,以他們的用戶名稱命名,幷包含電子郵件,姓名等信息。假設我想搜索他們的名字,並希望得到他們的用戶名。任何理智的方式來做到這一點?在字典中搜索值?

字典結構的一個例子:

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

你能告訴你的類型的字典的確切佈局? – 2012-03-03 02:53:15

+0

例如,您是否可以顯示幾行代碼來創建相同結構的字典?是否像{1:{「name」:「John Doe」,「email」:「[email protected]」},2:{「name」:「Jane Doe」,「email」:「janedoe @ gmail.com「}} – 2012-03-03 02:55:10

+0

@DavidRobinson該示例是正確的,抱歉沒有更具體。 – user1246337 2012-03-03 02:56:22

回答

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

修正了它,希望您不介意。 – 2012-03-03 02:54:16

+0

@NiklasB。 'iteritems'很好,不是嗎? – 2012-03-03 02:55:20

+1

是的,但它在Py3中被移除了,這就是爲什麼我傾向於使用SO上的'items'來向上兼容。同樣適用於'range'而不是'xrange'等。 – 2012-03-03 02:56:06

0

如果執行這些各種各樣的查詢很多,簡單地使用這個字典格式不符合您的需求。

您應該爲每個要搜索的字段指定一個字典,或者考慮使用關係解決方案(如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