Два способа вы могли бы потенциально улучшить это. Вы говорите, что ваша OrderedDict
действительно длинная, поэтому я бы порекомендовал первый вариант, поскольку по мере увеличения размера ваших данных быстро становитесь быстрее второго.
1) используйте Pandas:
In [1]: from collections import OrderedDict
In [2]: import pandas as pd
In [3]: d = OrderedDict([
...: ('JIRAUSER16100', {'name': 'john.smith',
...: 'fullname': 'John Smith',
...: 'email': 'John.Smith@domain.test',
...: 'active': True}),
...: ('JIRAUSER16300', {'name': 'susan.jones',
...: 'fullname': 'Susan Jones',
...: 'email': 'Susan.Jones@domain.test',
...: 'active': True})
...: ])
In [4]: df = pd.DataFrame(d).T
In [5]: df
Out[5]:
name fullname email active
JIRAUSER16100 john.smith John Smith John.Smith@domain.test True
JIRAUSER16300 susan.jones Susan Jones Susan.Jones@domain.test True
In [6]: df.loc[df['name'] == 'susan.jones', 'email'][0]
Out[6]: 'Susan.Jones@domain.test'
По шкале от простого к изучению, но слабого до трудного для изучения, но мощного, pandas
довольно далеко от последняя крайность Здесь можно распаковать приличную сумму, если вы не знакомы с pandas
, поэтому для краткости я не буду в нее go. Но не стесняйтесь комментировать любые вопросы, если вам помогут дополнительные объяснения.
2) Используйте встроенную next
функцию
Это позволит вам избежать зацикливания через полный словарь. Чтобы сделать длинную историю действительно короткой, вы можете передать next
генератор с троичным выражением, и он будет по существу проходить через итерацию, пока не найдет первый элемент, который удовлетворяет данному условию. Так что в вашем случае
In [7]: next(entry['email'] for entry in d.values() if entry['name'] == 'susan.jones')
Out[7]: 'Susan.Jones@domain.test'
будет работать. Это сэкономит вам время стихов, повторяющих весь диктовку, но в отличие от варианта 1, его скорость будет зависеть от того, где в вашей OrderedDict
находится запись, которую вы пытаетесь найти. Если по какой-то причине вам не нужно придерживаться исключительно стандартной библиотеки, Pandas будет намного быстрее для любого набора данных разумного размера.
Надеюсь, это поможет!