prosource

사전 목록에 값이 이미 있는지 확인하시겠습니까?

probook 2023. 4. 13. 20:57
반응형

사전 목록에 값이 이미 있는지 확인하시겠습니까?

Python 사전 목록은 다음과 같습니다.

a = [
    {'main_color': 'red', 'second_color':'blue'},
    {'main_color': 'yellow', 'second_color':'green'},
    {'main_color': 'yellow', 'second_color':'blue'},
]

다음과 같이 특정 키/값을 가진 사전이 목록에 있는지 확인하고 싶습니다.

// is a dict with 'main_color'='red' in the list already?
// if not: add item

한 가지 방법은 다음과 같습니다.

if not any(d['main_color'] == 'red' for d in a):
    # does not exist

괄호 안의 부분은 반환되는 생성자 식입니다.True검색 중인 키와 값의 쌍이 있는 각 사전의 경우, 그렇지 않은 경우False.


키도 없어질 수 있는 경우 위의 코드는KeyError를 사용하여 이 문제를 해결할 수 있습니다.get디폴트값을 지정합니다.기본값을 지정하지 않으면None이 반환됩니다.

if not any(d.get('main_color', default_value) == 'red' for d in a):
    # does not exist

이 방법이 도움이 될 수 있습니다.

a = [{ 'main_color': 'red', 'second_color':'blue'},
     { 'main_color': 'yellow', 'second_color':'green'},
     { 'main_color': 'yellow', 'second_color':'blue'}]

def in_dictlist(key, value, my_dictlist):
    for entry in my_dictlist:
        if entry[key] == value:
            return entry
    return {}

print in_dictlist('main_color','red', a)
print in_dictlist('main_color','pink', a)

@Mark Byers의 훌륭한 답변과 다음 @Florent 질문에 근거해, 2개 이상의 키를 가지는 dics 리스트에 있는 2개의 조건에서도 동작하는 것을 나타냅니다.

names = []
names.append({'first': 'Nil', 'last': 'Elliot', 'suffix': 'III'})
names.append({'first': 'Max', 'last': 'Sam', 'suffix': 'IX'})
names.append({'first': 'Anthony', 'last': 'Mark', 'suffix': 'IX'})

if not any(d['first'] == 'Anthony' and d['last'] == 'Mark' for d in names):

    print('Not exists!')
else:
    print('Exists!')

결과:

Exists!

이러한 기능을 필요로 하는 것은 다음과 같습니다.

 def add_unique_to_dict_list(dict_list, key, value):
  for d in dict_list:
     if key in d:
        return d[key]

  dict_list.append({ key: value })
  return value

OP가 요청한 것을 실행하는 또 다른 방법:

 if not filter(lambda d: d['main_color'] == 'red', a):
     print('Item does not exist')

filterOP가 테스트하는 항목으로 목록을 필터링합니다.if그런 다음 조건은 "이 항목이 없는 경우"라는 질문을 하고 이 블록을 실행합니다.

가 존재하는지 확인하는 것이 좋을 것 같습니다.일부 코멘트는 여기에 링크 설명을 입력합니다.

따라서 행 끝에 작은 if 절을 추가합니다.


input_key = 'main_color'
input_value = 'red'

if not any(_dict[input_key] == input_value for _dict in a if input_key in _dict):
    print("not exist")

틀렸다면 확실치 않지만 OP에서 키-값 쌍이 있는지, 키-값 쌍이 없는지 확인하도록 요청했다고 생각합니다.

이 경우 작은 기능을 제안합니다.

a = [{ 'main_color': 'red', 'second_color': 'blue'},
     { 'main_color': 'yellow', 'second_color': 'green'},
     { 'main_color': 'yellow', 'second_color': 'blue'}]

b = None

c = [{'second_color': 'blue'},
     {'second_color': 'green'}]

c = [{'main_color': 'yellow', 'second_color': 'blue'},
     {},
     {'second_color': 'green'},
     {}]


def in_dictlist(_key: str, _value :str, _dict_list = None):
    if _dict_list is None:
        # Initialize a new empty list
        # Because Input is None
        # And set the key value pair
        _dict_list = [{_key: _value}]
        return _dict_list

    # Check for keys in list
    for entry in _dict_list:
        # check if key with value exists
        if _key in entry and entry[_key] == _value:
            # if the pair exits continue
            continue
        else:
            # if not exists add the pair
            entry[_key] = _value
    return _dict_list


_a = in_dictlist("main_color", "red", a )
print(f"{_a=}")
_b = in_dictlist("main_color", "red", b )
print(f"{_b=}")
_c = in_dictlist("main_color", "red", c )
print(f"{_c=}")

출력:

_a=[{'main_color': 'red', 'second_color': 'blue'}, {'main_color': 'red', 'second_color': 'green'}, {'main_color': 'red', 'second_color': 'blue'}]
_b=[{'main_color': 'red'}]
_c=[{'main_color': 'red', 'second_color': 'blue'}, {'main_color': 'red'}, {'second_color': 'green', 'main_color': 'red'}, {'main_color': 'red'}]

팔로잉은 나에게 효과가 있다.

    #!/usr/bin/env python
    a = [{ 'main_color': 'red', 'second_color':'blue'},
    { 'main_color': 'yellow', 'second_color':'green'},
    { 'main_color': 'yellow', 'second_color':'blue'}]

    found_event = next(
            filter(
                lambda x: x['main_color'] == 'red',
                a
            ),
      #return this dict when not found
            dict(
                name='red',
                value='{}'
            )
        )

    if found_event:
        print(found_event)

    $python  /tmp/x
    {'main_color': 'red', 'second_color': 'blue'}

언급URL : https://stackoverflow.com/questions/3897499/check-if-value-already-exists-within-list-of-dictionaries

반응형