1

重複の可能性:
リストが空白かどうかをどのように確認しますか?

def CleanWhiteSpace(theDict) :
    stuff=[]

    for key,value in theDict.items():
        for d in value:
            if value != " ":
                stuff.append(d)    
                print d
                theDict[key]=stuff
            if not value[d]:
                print value
        stuff=[]
    return theDict
print CleanWhiteSpace({'a':['1','2'],'b':['3',' '],'c':[]})

cが空白であるかどうかをどのように確認しますか?cは単に[]に等しいですか?

さて、私はその中にリストを持っている辞書を持っています、これらのリストのいくつかは何も構成されていません。辞書をループして、ANEMPTYLISTの値を持つキーを削除する必要があります。

できるだけ明確にしようとしています。私は何を試しましたか?キーの値が何もないかどうかを確認するために、複数の異なる方法を試しました。value == "":ステートメントを試しました。len関数を試して値が空かどうかを確認しました。value:何も機能していないようですが、なぜですか?誰かが答えたように、空のリストはループの本体で実行されないためです

4

3 に答える 3

1

あなたの例では、 keycが処理されているときの値はにkeyなり'c'、の値は空のリストになります。これをテストするには、次のように言います。または、他の種類のシーケンスではなくリストであることがわかっている場合は、.value[]if not value:if value==[]

if d==[]:書かれている質問からはわかりにくいのですが、ループの中に何か入れてみたりしたのではないでしょうか?が空のリストの場合value、ループfor d in value:は空のリストの要素をループしており、何もないため、ループ本体は実行されないため、これは機能しません。

valueちなみに、あなたのコードの他のいくつかのビットは、とその要素の間の混乱を示しているようです。たとえば、あなたは書いていますif value != " "が、確かにそれdはあなたがそこでテストしたいということです。そして、何がありif not value[d]:ますか?d索引付けするのに適したものであると期待するのはなぜvalueですか?

stuffまた、コードの実行時に何が起こるかについても、もう少し慎重に検討する必要があります。

于 2012-06-14T00:16:14.623 に答える
1

編集:

これはどう?

def CleanWhiteSpace(theDict):
    newDict = {}
    for key in theDict:
        if theDict[key]:
            newDict[key] = theDict[key]
    return newDict

これにより、その場での変更が回避されることに注意してtheDictください。必要な場合は、お問い合わせください。

リストが空白かどうかを確認するには、次の 2 つの方法があります。

a_list = []
if not a_list:
    do something #the if is entered if the list is blank

または

a_list = []
if len(a_list)==0:
    do something

2 つのスニペットは同等です。a_listの値が暗黙的にブール値に変換され、 isbool([])であるため、最初のものが機能することに注意してくださいFalse

于 2012-06-14T00:16:37.930 に答える
0
theDict = dict( [(k,v) for k,v in theDict.items() if len(v)>0])
于 2012-06-14T00:44:39.090 に答える