打印字典中的值而不打印空lis

2024-09-29 23:15:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据:

d = d = [ {
  "test" : [ {
    "win" : {
      "number" : 0
    },
    "taken" : [ {
      "id" : "0",
      "library" : [ ]
    } ]
  }, {
    "win" : {
      "number" : 1
    },
    "taken" : [ {
      "id" : "1",
      "library" : [ {
        "takenid" : "2",
        "lib" : "man"
      } ]
    }, {
      "id" : "2",
    } ]
  }, {
    "chunk" : {
      "number" : 2
    },
    "taken" : [ {
      "id" : "3",
      "library" : [ {
        "takenid" : "0",
        "lib" : "woman"
      }, {
        "takenid" : "1",
        "lib" : "ghost"
      }, {
        "takenid" : "4",
        "lib" : "monster"
      } ]
    }, {
      "id" : "4"
    } ]
  } ]
} ]

我想打印“lib”字典的所有值,但不是空列表。在我的代码中,我将检查总的“id”,并将其与“takenid”进行比较,然后根据缺少的值添加新的“takenid”。之后,我希望创建一个{id:{塔克奈德:lib}}但不包括空列表(新添加的“takenid”和“lib”)。你知道吗

下面是我的脚本代码:

acom = []
lemmas = []
ordering = []
sort = []      

check = 0
for x in d[0]["test"]:
    for y in x["taken"]:
        if "id" in y:
            check += 1

value = []
#Calculate the number of "takenid"
for x in d[0]["test"]:
    for y in x["taken"]:
        if "library" in y:
            for u in y["library"]:
                value.append(int(u["takenid"]))
#Find the difference between the "id" and "takenid"                
missing = (set(range(check)) - set(value))
missing = list(missing)
#print(missing)

for x in d[0]["test"]:
    for y in x["taken"]:
        if "library" in y:
            y["library"].append({"takenid": "%s" % missing[0], "lib": []})
    break                    
#Create a dictionary                             
for x in d[0]["test"]:
    for y in x["taken"]:
        if "library" in y:
            for u in y["library"]:
                if "[]" not in u["lib"]:
                    #if "[]" not in uu:
                       ordering.append({y["id"]:{u["takenid"]:u["lib"]}})



#print(ordering)

但是,我的代码接收空列表并打印此输出:

电流输出:

[{'0': {'3': []}}, {'1': {'2': 'man'}}, {'3': {'0': 'woman'}}, {'3': {'1': 'ghost'}}, {'3': {'4': 'monster'}}]

我希望创建一个没有空列表的词典。有可能吗?你知道吗

预期产量:

[ {'1': {'2': 'man'}}, {'3': {'0': 'woman'}}, {'3': {'1': 'ghost'}}, {'3': {'4': 'monster'}}]

Tags: intestidnumber列表foriflib
2条回答

可能是"[]"引起了这个问题。将"[]"更改为[]

if "[]" not in u["lib"]:改成if u["lib"]:就行了。你知道吗

说明:

"[]" not in u["lib"]表示'find substring "[]" in u["lib"]'。但在u["lib"]中,只包含字符串或空列表。所以只要评估值存在就会给出正确答案。你知道吗

较短的备选方案:

[{baz['id']: {quux['takenid']: quux['lib']}}
    for foo in d
    for k, v in foo.items()
    for bar in v
    for kk, vv in bar.items()
    for baz in vv if 'library' in baz and baz['library']
    for quux in baz['library']
]
# => [{'1': {'2': 'man'}}, {'3': {'0': 'woman'}}, {'3': {'1': 'ghost'}}, {'3': {'4': 'monster'}}]

这里,if 'library' in baz and baz['library']将检查library键是否存在并且不为空。你知道吗

相关问题 更多 >

    热门问题