У меня есть словарь и я хочу передать его часть функции, причем эта часть задается списком (или набором) ключей. Как так:Нарезка словаря
# the dictionary
d = {1:2, 3:4, 5:6, 7:8}
# the subset of keys I'm interested in
l = (1,5)
Теперь, в идеале я хотел бы быть в состоянии сделать это:
>>> d[l]
{1:2, 5:6}
... но это не работает, так как она будет искать ключ с именем (1,5)
. И d[1,5]
даже не действителен Python (хотя, похоже, это будет удобно).
Я знаю, что могу это сделать:
>>> dict([(key, value) for key,value in d.iteritems() if key in l])
{1: 2, 5: 6}
или это:
>>> dict([(key, d[key]) for key in l])
, который является более компактным ... но я чувствую, что должен быть «лучше» способ сделать это , Не хватает ли более элегантного решения?
(Я использую Python 2.7)
Спасибо за тайминги! '' {k: d [k] для k в l} '' достаточно читаемо для кого-то с некоторым опытом (и более того, чем немного более сложная версия в моем вопросе), но что-то вроде '' d.intersect (l) '' будет еще лучше: есть словарь, список, и я что-то им делаю, не нужно упоминать k три раза, что не является ни вводом, ни выходом операции. Я знаю, что я жалуюсь на очень высоком уровне :) – Zak
@ Zak, не беспокойтесь, я думаю, что если ключи всегда находятся в dict, и вы даете, возможно, более объяснительные имена для переменных, тогда '{k: d [k] для k в l} 'довольно pythonic –