从这样的列表开始:
list = ["1-5", "1-6", "2-5", "2-6", "2-7", "2-8", "3-6", "3-7", "3-8", "4-1"]我要去找这个混蛋:
dict = {
    "1-5": {"1-5": 1, "1-6":1, "2-5":0, "2-6":0, "2-7":0, "2-8":0, "3-6":0, "3-7":0, "3-8":0, "4-1":0},
    "1-6": {"1-5": 1, "1-6":1, "2-5":0, "2-6":0, "2-7":0, "2-8":0, "3-6":0, "3-7":0, "3-8":0, "4-1":0},
    "2-5": {"1-5": 0, "1-6":0, "2-5":1, "2-6":1, "2-7":1, "2-8":1, "3-6":0, "3-7":0, "3-8":0, "4-1":0},
    "2-6": {"1-5": 0, "1-6":0, "2-5":1, "2-6":1, "2-7":1, "2-8":1, "3-6":0, "3-7":0, "3-8":0, "4-1":0},
    "2-7": {"1-5": 0, "1-6":0, "2-5":1, "2-6":1, "2-7":1, "2-8":1, "3-6":0, "3-7":0, "3-8":0, "4-1":0},
    "2-8": {"1-5": 0, "1-6":0, "2-5":1, "2-6":1, "2-7":1, "2-8":1, "3-6":0, "3-7":0, "3-8":0, "4-1":0},
    "3-6": {"1-5": 0, "1-6":0, "2-5":0, "2-6":0, "2-7":0, "2-8":0, "3-6":1, "3-7":1, "3-8":1, "4-1":0},
    "3-7": {"1-5": 0, "1-6":0, "2-5":0, "2-6":0, "2-7":0, "2-8":0, "3-6":1, "3-7":1, "3-8":1, "4-1":0},
    "3-8": {"1-5": 0, "1-6":0, "2-5":0, "2-6":0, "2-7":0, "2-8":0, "3-6":1, "3-7":1, "3-8":1, "4-1":0},
    "4-1": {"1-5": 0, "1-6":0, "2-5":0, "2-6":0, "2-7":0, "2-8":0, "3-6":0, "3-7":0, "3-8":0, "4-1":1}
}基本上这两个维度是相同的列表。它是一个方阵,二进制值基于以下条件:
If right(i,1) = right(j,1):
    dict[i][j] = 1
    else
    dict[i][j] = 0 如果元素dicti的索引i,j以相同的数字开头(可能不止一个,ex )。( "11-5")然后dicti = 1,否则dicti =0
我怎么用python写这个呢?
发布于 2021-01-19 16:31:53
您可以编写嵌套的dict理解来实现这一点,具体如下:
my_list = ["1-5", "1-6", "2-5", "2-6", "2-7", "2-8", "3-6", "3-7", "3-8", "4-1"]
my_dict = {s: {d: int(d.split('-')[0] == s.split('-')[0]) for d in my_list} for s in my_list}my_dict将在其中保存:
{
    '1-5': {'1-5': 1, '1-6': 1, '2-5': 0, '2-6': 0, '2-7': 0, '2-8': 0, '3-6': 0, '3-7': 0, '3-8': 0, '4-1': 0}, 
    '1-6': {'1-5': 1, '1-6': 1, '2-5': 0, '2-6': 0, '2-7': 0, '2-8': 0, '3-6': 0, '3-7': 0, '3-8': 0, '4-1': 0}, 
    '2-5': {'1-5': 0, '1-6': 0, '2-5': 1, '2-6': 1, '2-7': 1, '2-8': 1, '3-6': 0, '3-7': 0, '3-8': 0, '4-1': 0}, 
    '2-6': {'1-5': 0, '1-6': 0, '2-5': 1, '2-6': 1, '2-7': 1, '2-8': 1, '3-6': 0, '3-7': 0, '3-8': 0, '4-1': 0}, 
    '2-7': {'1-5': 0, '1-6': 0, '2-5': 1, '2-6': 1, '2-7': 1, '2-8': 1, '3-6': 0, '3-7': 0, '3-8': 0, '4-1': 0},
    '2-8': {'1-5': 0, '1-6': 0, '2-5': 1, '2-6': 1, '2-7': 1, '2-8': 1, '3-6': 0, '3-7': 0, '3-8': 0, '4-1': 0},
    '3-6': {'1-5': 0, '1-6': 0, '2-5': 0, '2-6': 0, '2-7': 0, '2-8': 0, '3-6': 1, '3-7': 1, '3-8': 1, '4-1': 0},
    '3-7': {'1-5': 0, '1-6': 0, '2-5': 0, '2-6': 0, '2-7': 0, '2-8': 0, '3-6': 1, '3-7': 1, '3-8': 1, '4-1': 0},
    '3-8': {'1-5': 0, '1-6': 0, '2-5': 0, '2-6': 0, '2-7': 0, '2-8': 0, '3-6': 1, '3-7': 1, '3-8': 1, '4-1': 0},
    '4-1': {'1-5': 0, '1-6': 0, '2-5': 0, '2-6': 0, '2-7': 0, '2-8': 0, '3-6': 0, '3-7': 0, '3-8': 0, '4-1': 1}
}发布于 2021-01-19 16:32:20
你可以这样做:
list1 = ["1-5", "1-6", "2-5", "2-6", "2-7", "2-8", "3-6", "3-7", "3-8", "4-1"]
d={}
for element in list1:
    start=element.split('-')[0]
    d1={}
    for ele in list1:
        if ele.split('-')[0]==start:
            d1[ele]=1
        else:
            d1[ele]=0
    d[element]=d1
print(d)发布于 2021-01-19 16:49:47
我写了一个类似的解决方案,与Moinuddin Quadri的方案略有不同,以避免分裂和检索第一个数字的每个循环的内在理解。
我在木星笔记本上用%%timeit进行了测试,测试结果如下:
其他答案:44 µs ± 3.02 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
这个答案:33.3 µs ± 3.58 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
keys = ["1-5", "1-6", "2-5", "2-6", "2-7", "2-8", "3-6", "3-7", "3-8", "4-1"]
result = {
    outer_key: {inner_key: int(inner_key.startswith(first_int)) for inner_key in keys}
    for first_int, outer_key in zip((key.split("-")[0] for key in keys), keys)
}
print(result)
# output
{
  "1-5": {
    "1-5": 1,
    "1-6": 1,
    "2-5": 0,
    "2-6": 0,
    "2-7": 0,
    "2-8": 0,
    "3-6": 0,
    "3-7": 0,
    "3-8": 0,
    "4-1": 0
  },
  "1-6": {
    "1-5": 1,
    "1-6": 1,
    "2-5": 0,
    "2-6": 0,
    "2-7": 0,
    "2-8": 0,
    "3-6": 0,
    "3-7": 0,
    "3-8": 0,
    "4-1": 0
  },
  "2-5": {
    "1-5": 0,
    "1-6": 0,
    "2-5": 1,
    "2-6": 1,
    "2-7": 1,
    "2-8": 1,
    "3-6": 0,
    "3-7": 0,
    "3-8": 0,
    "4-1": 0
  },
  "2-6": {
    "1-5": 0,
    "1-6": 0,
    "2-5": 1,
    "2-6": 1,
    "2-7": 1,
    "2-8": 1,
    "3-6": 0,
    "3-7": 0,
    "3-8": 0,
    "4-1": 0
  },
  "2-7": {
    "1-5": 0,
    "1-6": 0,
    "2-5": 1,
    "2-6": 1,
    "2-7": 1,
    "2-8": 1,
    "3-6": 0,
    "3-7": 0,
    "3-8": 0,
    "4-1": 0
  },
  "2-8": {
    "1-5": 0,
    "1-6": 0,
    "2-5": 1,
    "2-6": 1,
    "2-7": 1,
    "2-8": 1,
    "3-6": 0,
    "3-7": 0,
    "3-8": 0,
    "4-1": 0
  },
  "3-6": {
    "1-5": 0,
    "1-6": 0,
    "2-5": 0,
    "2-6": 0,
    "2-7": 0,
    "2-8": 0,
    "3-6": 1,
    "3-7": 1,
    "3-8": 1,
    "4-1": 0
  },
  "3-7": {
    "1-5": 0,
    "1-6": 0,
    "2-5": 0,
    "2-6": 0,
    "2-7": 0,
    "2-8": 0,
    "3-6": 1,
    "3-7": 1,
    "3-8": 1,
    "4-1": 0
  },
  "3-8": {
    "1-5": 0,
    "1-6": 0,
    "2-5": 0,
    "2-6": 0,
    "2-7": 0,
    "2-8": 0,
    "3-6": 1,
    "3-7": 1,
    "3-8": 1,
    "4-1": 0
  },
  "4-1": {
    "1-5": 0,
    "1-6": 0,
    "2-5": 0,
    "2-6": 0,
    "2-7": 0,
    "2-8": 0,
    "3-6": 0,
    "3-7": 0,
    "3-8": 0,
    "4-1": 1
  }
}https://stackoverflow.com/questions/65795382
复制相似问题