programing

사전에서 문자열 키를 int로 변환

goodcopy 2023. 3. 29. 22:11
반응형

사전에서 문자열 키를 int로 변환

제 질문은 목록 사전이 있고 모든 목록 형식의 키 값과 모든 요소를 변경하는 데 관심이 있다는 점을 제외하고는 이것과 매우 유사합니다.string로.int.

예를 들어 사전이 필요합니다.

{ '1':['1', '2', '3', '4'] , '2':['1', '4'] , '3':['43','176'] }

다음 중 하나가 됩니다.

{ 1:[1, 2, 3, 4] , 2:[1, 4] , 3:[43,176] }

이게 가능합니까?

제가 이 사전을 만든 이후로 더 일반적이었습니다.JSON포맷 파일

{"0": ["1", "2", "3", "4"], "1": ["0", "2", "3", "4", "27", "94",
"95", "97", "128", "217", "218", "317"], "2": ["0", "1", "3", "4",
"94", "95"], "3": ["0", "1", "2", "4", "377"], "4": ["0", "1", "2",
"3", "27", "28"], "5": ["6", "7", "8"], "6": ["5", "7", "8"], "7":
["5", "6", "8", "14", "23", "40", "74", "75", "76", "362", "371",
"372"], "8": ["5", "6", "7", "66"], "9": ["10", "11", "12"], "10":
["9", "11", "12", "56", "130", "131"]}

를 참조해 주세요.

json_data = open("coauthorshipGraph.txt")
coautorshipDictionary = json.load( json_data )
json_data.close()

로딩 시에 직접 할 수 있는 방법이 있습니까?

d = {'1':'145' , '2':'254' , '3':'43'}
d = {int(k):int(v) for k,v in d.items()}
>>> d
{1: 145, 2: 254, 3: 43}

값 리스트의 경우

>>> d = { '1':['1', '2', '3', '4'] , '2':['1', '4'] , '3':['43','176'] }
>>> d = {int(k):[int(i) for i in v] for k,v in d.items()}

고객님의 경우:

coautorshipDictionary = {int(k):int(v) for k,v in json.load(json_data)}

또는

coautorshipDictionary = {
    int(k):[int(i) for i in v] for k,v in json.load(json_data)}

커디스의 대답과 비슷하지만, 이 점을 활용하면object_hook인수:

coautorshipDictionary = json.load(json_data, object_hook=lambda d: {int(k): [int(i) for i in v] if isinstance(v, list) else v for k, v in d.items()}) # iteritems() for Python 2

이 방법의 주요 장점은 중첩된 dict가 있는 경우 로더가 결과 dict를 통과하기 위해 코드를 쓸 필요 없이 데이터를 로드할 때 중첩된 각 dict를 자체적으로 처리할 수 있다는 것입니다.목록의 값이 숫자 문자열이 아니거나 목록 자체에도 dict가 포함되어 있는 경우, JSON 구조가 복잡해지고 데이터가 최상위 dict 값으로만 목록만 있는 경우 체크인을 추가할 수도 있습니다.if isinstance(v, list) else v일부.

이 솔루션은 제공된 json에서와 같이 반복 가능한 가치를 가진 경우에 사용할 수 있습니다.

my_dict = {"0": ["1", "2", "3", "4"], "1": ["0", "2", "3", "4", "27", "94", "95", "97", "128", "217", "218", "317"], "2": ["0", "1", "3", "4", "94", "95"], "3": ["0", "1", "2", "4", "377"], "4": ["0", "1", "2", "3", "27", "28"], "5": ["6", "7", "8"], "6": ["5", "7", "8"], "7": ["5", "6", "8", "14", "23", "40", "74", "75", "76", "362", "371", "372"], "8": ["5", "6", "7", "66"], "9": ["10", "11", "12"], "10": ["9", "11", "12", "56", "130", "131"]}

output_dict = {}
for key, value in my_dict.iteritems():
    output_dict[int(key)] = [int(item) for item in value]

output_dict

출력:

{0: [1, 2, 3, 4],
 1: [0, 2, 3, 4, 27, 94, 95, 97, 128, 217, 218, 317],
 2: [0, 1, 3, 4, 94, 95],
 3: [0, 1, 2, 4, 377],
 4: [0, 1, 2, 3, 27, 28],
 5: [6, 7, 8],
 6: [5, 7, 8],
 7: [5, 6, 8, 14, 23, 40, 74, 75, 76, 362, 371, 372],
 8: [5, 6, 7, 66],
 9: [10, 11, 12],
 10: [9, 11, 12, 56, 130, 131]}

질문의 두 번째 부분은 파일을 읽을 때 줄에 맞는 독해법을 사용할 수 있습니다.지옥처럼 난독화되어 있어요

with open('coauthorshipGraph.txt', 'r') as f:
    json_data = { int(key) : [int(item) for item in value] for key, value in json.load(f).iteritems()}

json_data

이것은 위와 같은 출력을 산출합니다.

dict = { 'a':'100', 'b':'200', 'c':'300', 'd':'four_hundred', 'e':'500' }
dict_parse = {k: int(v) if v.isnumeric() else v for k, v in dict.items()}
>>> dict_parse
{ 'a': 100, 'b': 200, 'c': 300, 'd':'four_hundred', 'e':500}

알파벳 문자열과 숫자 문자열이 있는 값을 포함하는 Python 객체(dict)를 가지고 있는 경우, 우리는 매핑하고 그들의 유형을 확인할 수 있습니다.string.isnumeric(), 을 처리할 때float숫자는 if 문을 수정하여 소수점을 바꿉니다. 음수에 동일한 주체를 적용할 수 있습니다.

dict = { 'a':'10.0', 'b':'20.12', 'c':'300.3', 'd':'four_hundred', 'e':'500' }
dict_parse = {k: float(v) if v.replace(".", "").isnumeric() else v for k, v in dict.items()}

>>> dict_parse
{ 'a': 10.0, 'b': 20.12, 'c': 300.3, 'd':'four_hundred', 'e':500}

언급URL : https://stackoverflow.com/questions/21193682/convert-a-string-key-to-int-in-a-dictionary

반응형