Словарь Python для словаря с условием - PullRequest
0 голосов
/ 25 июня 2011

Я работаю над функцией. Если «источник» найден в «d», то он будет добавлен к значению объекта словаря, в противном случае он будет добавлен. Например в этом случае. «а» добавляется дважды, а «б» добавляется один раз.

Я хотел бы получить вывод, как показано ниже (последняя строка)

Спасибо.

def adder(source,dest,weight):
   """"""


if __name__ == "__main__":
  d = {} #dictionary
  adder('a','b',1)
  adder('a','f',4)
  adder('b','c',1)
  adder('f','g',3)

  print d

  {'a':{'b':1,'f':4}, 'b':{'c':1}, 'f':{'g':3},g:{},c:{}} #<----final o/p needed

Ответы [ 3 ]

2 голосов
/ 25 июня 2011

Словарь словарей - это просто словарь кортежей.Вы можете реализовать сумматор следующим образом:

#The dictionary we will be adding to
d = {}

def adder(source, dest, weight):
    d[(source, dest)] = weight

Основная причина этого заключается в том, что в любой категории с продуктами Hom (C, Hom (B, A)) естественно изоморфно Hom (C x B).А).Или на функциональном языке,

f: C -> (B -> A)

То же, что и:

f: C x B -> A

И, по совпадению, именно поэтому (A ^ B) ^ C = A ^ (B * C).

1 голос
/ 25 июня 2011

Следующая реализация должна сделать это:

def adder(dict, source, dest, weight):
   if not source in dict:
     dict[source] = {}
   if not dest in dict:
     dict[dest] = {}
   dict[source][dest] = weight

Обратите внимание, что я добавил dict в качестве первого аргумента для вашего метода.

0 голосов
/ 25 июня 2011

Вы можете просто использовать простое условие if:

In [9]: def adder(d,source,dest,weight):
   ...:     if source in d:
   ...:         d[source][dest] = weight
   ...:     else:
   ...:         d[source] = {dest: weight}
   ...: 

In [10]: d={}

In [11]: adder(d, 'a', 'b', 1)

In [12]: adder(d, 'a', 'f', 4)

In [13]: adder(d, 'b', 'c', 1)

In [14]: d
Out[14]: {'a': {'b': 1, 'f': 4}, 'b': {'c': 1}}
...