2009-10-29 3 views
-3

Заданные словари d1 и d2 создают новый словарь со следующим свойством: для каждой записи (a, b) в d1, если есть запись (b, c) в d2, тогда запись (a, c) должна быть добавлена ​​в новый словарь. Как думать о решении?Я начинаю начинать с питона, новый словарь

+1

Если это проблема с домашней работой, пожалуйста, пометьте ее как таковой. –

+0

Пожалуйста, не задавайте домашние вопросы. Только отправляйте свои попытки и задавайте конкретные проблемы, которые вы не понимаете. – hasen

ответ

6
def transitive_dict_join(d1, d2): 
    result = dict() 
    for a, b in d1.iteritems(): 
    if b in d2: 
     result[a] = d2[b] 
    return result 

Вы можете выразить это более сжато, конечно, но я думаю, что для новичка, орфографические вещи из яснее и более поучительные.

4

Я согласен с Алексом, на необходимостью написания вещей как новичка, а затем перейти к более сжатым/абстрактным/опасным конструкциям.

Для записи я размещаю здесь версию для понимания списка, поскольку Пол не работает.

>>> d1 = {'a':'alpha', 'b':'bravo', 'c':'charlie', 'd':'delta'} 
>>> d2 = {'alpha':'male', 'delta':'faucet', 'echo':'in the valley'} 
>>> d3 = dict([(x, d2[d1[x]]) for x in d1**.keys() **if d2.has_key(d1[x])]) #.keys() is optional, cf notes 
>>> d3 
{'a': 'male', 'd': 'faucet'} 

В двух словах, линия с "d3 =" говорит следующее:

 
    d3 is a new dict object made from 
     all the pairs 
      made of x, the key of d1 and d2[d1[x]] 
       (above are respectively the "a"s and the "c"s in the problem) 
      where x is taken from all the keys of d1 (the "a"s in the problem) 
      if d2 has indeed a key equal to d1[x] 
       (above condition avoids the key errors when getting d2[d1[x]]) 
+0

Да, я не тестировал. Твой трюк делает трюк. –

+0

Есть ли причина, по которой вы используете .keys()? Отличается ли это от: 'd3 = dict ([(x, d2 [d1 [x]]) для x в d1, если d1 [x] в d2])'? –

+0

@Andrea Нет особой причины, кроме легкой попытки сделать выражение более явным для новичков (cf Alex 'wise взять на себя это). Но вы правы. X x для x в d1' является идиоматическим способом перечисления ключей d1. – mjv

Смежные вопросы