2016-06-14 5 views
0

私はこのような辞書を持っています。辞書のpythonのリストにある特定のキーのすべての要素にアクセスする

data1 = {"00:08:22:24:f8:02": 
     {"cities" : 
       [ 
       {'name': 'Bhubaneswar', 'count': 12, 'date':14/05/2016}, 
       {'name': 'Kolkata', 'count': 4, 'date': 15/05/2016}, 
       {'name': 'Mumbai', 'count': 6, 'date' : 16/04/2016} 
      ]} 
    } 

は、私は、文字列varが(たとえば)キー '名前'

  • に値と一致した場合

    1. をチェックしたい場合はdate型の変数x(例えば)、キー '日付'の値と一致します。

    辞書データ内の辞書のリストにあります。

  • +0

    あなたの問題の説明はわかりにくいです。あなたは希望の入力に対して望ましい出力を提供してください。 – TheLazyScripter

    +2

    どちらの場合でもサンプル入力用に具体的な出力を提供できますか?説明は不明です。 –

    +0

    私は分かりません。辞書から値を取得する方法を知っています。だから、文字列に部分文字列があるかどうか、そして日付が別の日付の後にあるかどうかをチェックする方法を尋ねているようです。だからあなたはあなたの質問の辞書部分を削除し、他の部分への回答を検索することができます。 –

    答えて

    0

    私はあなたが達成したいと思っていた正確なフォーマットを知らないので、私はいくつかのかなり推測された推測作業をしなければなりませんでした。私はこれがとにかく役立つことを願っています幸運

    import datetime 
    data1 = {"00:08:22:24:f8:02": 
              {"cities" : 
                 [{'name': 'Bhubaneswar', 'count': 12, 'date':'14/05/2016'}, 
                 {'name': 'Kolkata', 'count': 4, 'date': '15/05/2016'}, 
                 {'name': 'Mumbai', 'count': 6, 'date' : '16/04/2016'}] 
              } 
         } 
    #first issue with your origonal data, cities would actually become a dict based on your origonal data 
    
    def get_name(dict, name, hash=None, position=None): 
        ''' 
         :arg dict is your data set 
         :arg name is the name you want to check for 
         :arg hash is the first index of your dict 
         :arg position is the 2nd index of your dict 
         :returns return the first object that contains name 
         ''' 
    
        if name and hash and position: 
         for i, v in enumerate(dict[hash][position]): 
          try: 
           if name in v['name']: 
            return dict[hash][position][i] 
          except: 
           pass 
        else: 
         for hash, v in dict.iteritems(): 
          for position, v2 in v.iteritems(): 
           for i, index in enumerate(v2): 
            for field, v3 in index.iteritems(): 
             if name in str(v3): 
              return index 
    
        return {} 
    
    def is_date_greater(dict, date): 
        ''' 
         :arg dict is your data set 
         :arg date is the date you want to compare with 
         :returns True if date is greater than the supplied date 
         ''' 
    
        date = datetime.datetime.strptime(date, '%d/%m/%y') 
        try: 
         n_date = datetime.datetime.strptime(dict['date'], '%d/%m/%Y') 
         if date < n_date: 
          return True 
        except: 
         pass 
        return False 
    
    print is_date_greater(get_name(data1, 'Bhub'), '12/4/16') 
    
    +0

    私はdictを更新する必要があります。データフレームから。私はこのようなロジックを定義しました。 dic.keysで MAC IF(): 'DEF楽しい(MAC、都市、日付) フラグ= DIC [MAC]の都市0 : == [ '都市']都市なら都市: 日付もし>シティ[ '日']: 都市[ 'カウント'] + = 1 都市[ '日付'] =日付 フラグ= 1つの ブレークフラグ== 0の場合: DIC [MAC] .append({」 else: dic [mac] = [] dic [mac] .append({"city":city、 "count":1、 "city":city、 "count" "date":date}) ' データフレームには、 'mac'、 'city'、 'date'という3つの行があり、辞書は上記と同じです。 –

    +0

    私は 'city in dic [mac] 'のチェックに問題があり、「city」を含むその辞書を正確にチェックし、その辞書の日付をさらに確認する必要があるため、さらに改行しています。 –

    +0

    私はあなたの目標を達成するためのコードを更新しました – TheLazyScripter

    関連する問題