首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从列表中创建二进制嵌套方形数据集

从列表中创建二进制嵌套方形数据集
EN

Stack Overflow用户
提问于 2021-01-19 16:17:23
回答 4查看 61关注 0票数 2

从这样的列表开始:

代码语言:javascript
运行
复制
list = ["1-5", "1-6", "2-5", "2-6", "2-7", "2-8", "3-6", "3-7", "3-8", "4-1"]

我要去找这个混蛋:

代码语言:javascript
运行
复制
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}
}

基本上这两个维度是相同的列表。它是一个方阵,二进制值基于以下条件:

代码语言:javascript
运行
复制
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写这个呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-01-19 16:31:53

您可以编写嵌套的dict理解来实现这一点,具体如下:

代码语言:javascript
运行
复制
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将在其中保存:

代码语言:javascript
运行
复制
{
    '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}
}
票数 3
EN

Stack Overflow用户

发布于 2021-01-19 16:32:20

你可以这样做:

代码语言:javascript
运行
复制
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)
票数 0
EN

Stack Overflow用户

发布于 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)

代码语言:javascript
运行
复制
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
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65795382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档