在python中使用for循环的多字节生成

时间:2017-12-31 17:57:17

标签: python dictionary for-loop

我有一个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循环代码? 很多人都提前感谢。

2 个答案:

答案 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)