사전에서 문자열 키를 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
'programing' 카테고리의 다른 글
스프링 부트 및 스팍과의 통합 테스트 (0) | 2023.03.29 |
---|---|
GMail Chat은 어떻게 클라이언트의 조작 없이 AJAX 요구를 할 수 있습니까? (0) | 2023.03.29 |
Ionic - 로그인 페이지에서만 sidemenu를 제거하는 방법 (0) | 2023.03.29 |
ASP 버튼(시스템)의 포스트백을 무효로 하는 방법.Web.UI. WebControls.버튼) (0) | 2023.03.19 |
Keycloak 각도 'Access-Control-Allow-Origin' 헤더가 없습니다. (0) | 2023.03.19 |