Я начинающий питон, словарь новый - PullRequest
0 голосов
/ 29 октября 2009

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

Ответы [ 3 ]

6 голосов
/ 29 октября 2009
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 голосов
/ 29 октября 2009

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

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

>>> 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 голосов
/ 29 октября 2009
#!/usr/local/bin/python3.1
b = {   'aaa' : 'aaa@example.com',
        'bbb' : 'bbb@example.com',
        'ccc' : 'ccc@example.com'
    }
a = {'a':'aaa', 'b':'bbb', 'c':'ccc'}
c = {}    

for x in a.keys():
    if a[x] in b:
        c[x] = b[a[x]]

print(c)

Выход: {'a': 'aaa@example.com', 'c': 'ccc@example.com', 'b':'bbb @ example.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...