我有一个python的问题,我想使用for循环生成如下所示的multidict。数字是随机生成的,如果两个元素相同,则值为0。
arcs, capacity = multidict({
(0, 0): 0,
(0, 1): 80,
(0, 2): 11,
(1, 0): 15,
(1, 1): 0,
(1, 2): 120
(2, 0): 103,
(2, 1): 3,
(2, 2): 0 })
到目前为止,我对此进行了编码:
arcs = {}
for i in range(N):
for j in range(N):
arcs[i,j]=(random.randint(1,101))
但它与我所需要的完全不同。 任何人都可以帮助我如何为这个问题编写for循环代码? 很多人都提前感谢。
答案 0 :(得分:0)
由于您的密钥不同,因此您不需要创建multidict
。关闭你所描述的内容,你可以通过笨拙的字典理解或嵌套的for循环在一行中实现这一点。
import random
def create_multi_dict_comprehension(n, random_bound=100):
return {k : 0 if k[0] == k[1] else v for k in [(x,y) for x in range(n + 1) for y in range(n + 1)] for v in [random.randint(1, random_bound) for _ in range(n ** 2)]}
def create_multi_dict(n, random_bound=100):
my_dict = {}
for i in range(n+1):
for j in range(n+1):
my_dict[(i,j)] = 0 if i==j else random.randint(1,random_bound)
return my_dict
print(create_multi_dict(2))
# {(0, 0): 0, (0, 1): 91, (0, 2): 24, (1, 0): 77, (1, 1): 0, (1, 2): 39, (2, 0): 94, (2, 1): 60, (2, 2): 0}
答案 1 :(得分:0)
OP希望像http://www.gurobi.com/documentation/7.5/examples/netflow_py.html
中那样创建一个多字符目标是生成一个字典对象,可以将其作为multidict
的输入,这是 gurobi 软件中的api。所需的输入具有类似
{ (0, 0): 0,
(0, 1): 80,
(0, 2): 11,
(1, 0): 15,
(1, 1): 0,
(1, 2): 120
(2, 0): 103,
(2, 1): 3,
(2, 2): 0 }
方法1:for循环和字典
from gurobi import multidict
multidict_input = {}
for i in range(N):
for j in range(N):
multidict_input[i,j] = random.randint(1,101) if i != j else 0
arcs, capacity = multidict(multidict_input) # feed it into multidict
方法2 :(字典理解)
multidict_input = dict()
multidict_input = {(a,b): random.randint(1,101) if a != b else 0
for a in range(N) for b in range(N)}
arcs, capacities = multidict(multidict_input)