所以說我有一本字典,用戶,它有另一個詞典,以他們的用戶名稱命名,幷包含電子郵件,姓名等信息。假設我想搜索他們的名字,並希望得到他們的用戶名。任何理智的方式來做到這一點?在字典中搜索值?
字典結構的一個例子:
users = {1: {"name": "John Doe", "email": "[email protected]"},
2: {"name": "Jane Doe", "email": "[email protected]"}}
所以說我有一本字典,用戶,它有另一個詞典,以他們的用戶名稱命名,幷包含電子郵件,姓名等信息。假設我想搜索他們的名字,並希望得到他們的用戶名。任何理智的方式來做到這一點?在字典中搜索值?
字典結構的一個例子:
users = {1: {"name": "John Doe", "email": "[email protected]"},
2: {"name": "Jane Doe", "email": "[email protected]"}}
[uid for uid, attrs in users.items() if attrs['name'] == name_you_are_looking_for]
修正了它,希望您不介意。 – 2012-03-03 02:54:16
@NiklasB。 'iteritems'很好,不是嗎? – 2012-03-03 02:55:20
是的,但它在Py3中被移除了,這就是爲什麼我傾向於使用SO上的'items'來向上兼容。同樣適用於'range'而不是'xrange'等。 – 2012-03-03 02:56:06
如果執行這些各種各樣的查詢很多,簡單地使用這個字典格式不符合您的需求。
您應該爲每個要搜索的字段指定一個字典,或者考慮使用關係解決方案(如sqlite)。
這將是更容易理解:
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
你能告訴你的類型的字典的確切佈局? – 2012-03-03 02:53:15
例如,您是否可以顯示幾行代碼來創建相同結構的字典?是否像{1:{「name」:「John Doe」,「email」:「[email protected]」},2:{「name」:「Jane Doe」,「email」:「janedoe @ gmail.com「}} – 2012-03-03 02:55:10
@DavidRobinson該示例是正確的,抱歉沒有更具體。 – user1246337 2012-03-03 02:56:22