从这样的列表开始:
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
复制相似问题